1 ; number games chapter 4 2 ; little lisper 3 ; july 25 2005 4 5 ;============================================================================= 6 ; add 7 ;============================================================================= 8 (defun add (num1 num2) 9 (cond 10 ((zerop num2) num1) 11 (t (1+ (add num1 (1- num2)))) 12 ) 13 ) 14 15 (add 3 4) 16 (add 5 6) 17 18 ;============================================================================= 19 ; sub 20 ;============================================================================= 21 (defun sub (num1 num2) 22 (cond 23 ((zerop num2) num1) 24 (t (1- (sub num1 (1- num2)))) 25 ) 26 ) 27 28 (sub 7 5) 29 (sub 8 9) 30 31 ;============================================================================= 32 ; addvec 33 ;============================================================================= 34 (defun addvec (vec) 35 (cond 36 ((null vec) 0) 37 (t (add (car vec) (addvec (cdr vec)))) 38 ) 39 ) 40 41 (addvec (list 1 2 3)) 42 43 ;============================================================================= 44 ; x 45 ;============================================================================= 46 (defun x (num1 num2) 47 (cond 48 ((zerop num2) 0) 49 (t (add num1 (x num1 (1- num2)))) 50 ) 51 ) 52 53 (x 3 4) 54 (x 5 4) 55 56 ;============================================================================= 57 ; vec+ 58 ;============================================================================= 59 (defun vec+ (vec1 vec2) 60 (cond 61 ((null vec1) vec2) 62 ((null vec2) vec1) 63 (t (cons (add (car vec1) (car vec2)) (vec+ (cdr vec1) (cdr vec2)))) 64 ) 65 ) 66 67 (vec+ (list 3 6 9 11 4) (list 8 5 2 0 7)) 68 (vec+ (list 3 7) (list 4 6 8 1)) 69 70 ;============================================================================= 71 ; greater 72 ;============================================================================= 73 (defun greater (a b) 74 (cond 75 ((zerop a) nil) 76 ((zerop b) t) 77 (t (greater (1- a) (1- b))) 78 ) 79 ) 80 81 (greater 4 5) 82 (greater 6 5) 83 (greater 6 6) 84 85 ;============================================================================= 86 ; less 87 ;============================================================================= 88 (defun less (a b) 89 (cond 90 ((zerop b) nil) 91 ((zerop a) t) 92 (t (less (1- a) (1- b))) 93 ) 94 ) 95 96 (less 4 5) 97 (less 6 5) 98 (less 6 6) 99 100 ;============================================================================= 101 ; equal1 102 ;============================================================================= 103 (defun equal1 (a b) 104 (cond 105 ((zerop a) (zerop b)) 106 ((zerop b) nil) 107 (t (equal1 (1- a) (1- b))) 108 ) 109 ) 110 111 (equal1 4 5) 112 (equal1 6 5) 113 (equal1 6 6) 114 115 ;============================================================================= 116 ; equal2 117 ;============================================================================= 118 (defun equal2 (a b) 119 (not (or (greater a b) (less a b))) 120 ) 121 122 (equal2 4 5) 123 (equal2 6 5) 124 (equal2 6 6) 125 126 ;============================================================================= 127 ; ^ 128 ;============================================================================= 129 (defun ^ (num power) 130 (cond 131 ((zerop power) 1) 132 (t (x num (^ num (1- power)))) 133 ) 134 ) 135 136 (^ 2 3) 137 (^ 3 1) 138 (^ 2 0) 139 140 ;============================================================================= 141 ; myLength 142 ;============================================================================= 143 (defun myLength (l) 144 (cond 145 ((null l) 0) 146 (t (1+ (myLength (cdr l)))) 147 ) 148 ) 149 150 (myLength (list 'a 'b 'c)) 151 (myLength ()) 152 153 ;============================================================================= 154 ; pick 155 ;============================================================================= 156 (defun pick (index l) 157 (cond 158 ((null l) nil) 159 ((equal1 1 index) (car l)) ; ((zero (1- index)) (car l)) 160 (t (pick (1- index) (cdr l))) 161 ) 162 ) 163 164 (pick 4 (list 'lasagna 'spaghetti 'ravioli 'macaroni 'meatball)) 165 (pick 0 (list 'a)) 166 167 ;============================================================================= 168 ; rempick 169 ;============================================================================= 170 (defun rempick (index lat) 171 (cond 172 ((null lat) (quote())) 173 ((zerop (1- index)) (cdr lat)) 174 (t (cons (car lat) (rempick (1- index) (cdr lat)))) 175 ) 176 ) 177 178 (rempick 3 (list 'hotdogs 'with 'hot 'mustard)) 179 (rempick 0 ()) 180 (rempick 0 (list 'a 'b 'c)) 181 182 ;============================================================================= 183 ; no-nums 184 ;============================================================================= 185 (defun no-nums (lat) 186 (cond 187 ((null lat) (quote())) 188 ((numberp (car lat)) (no-nums (cdr lat))) 189 (t (cons (car lat) (no-nums (cdr lat)))) 190 ) 191 ) 192 193 (no-nums (list 5 'pears 6 'prunes 9 'dates)) 194 (no-nums (list 'a 'b 'c)) 195 196 ;============================================================================= 197 ; all-nums 198 ;============================================================================= 199 (defun all-nums (lat) 200 (cond 201 ((null lat) (quote())) 202 ((numberp (car lat)) (cons (car lat) (all-nums (cdr lat)))) 203 (t (all-nums (cdr lat))) 204 ) 205 ) 206 207 (all-nums (list 5 'pears 6 'prunes 9 'dates)) 208 (all-nums (list 'a 'b 'c)) 209 210 ;============================================================================= 211 ; all-nums 212 ;============================================================================= 213 (defun eqan? (a1 a2) 214 (cond 215 ((numberp a1) (cond 216 ((numberp a2) (= a1 a2)) 217 (t nil) 218 ) 219 ) 220 ((numberp a2) nil) 221 ((eq a1 a1)) 222 ) 223 ) 224 225 (eqan? 1 2) 226 (eqan? 2 2) 227 (eqan? 'haha 'haha)