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)