Solutions to exercises from week 4

(defun matches-first-p (list number)
(= number (first list)))

(defun matches-any (list number)
(if list
(if (matches-first-p list number)
t
(matches-first-p (rest list) number))))

(defun position-for-matches-any (list number)
(in-position-for-matches-any list number 0))

;; helper function for position-for-matches-any
(defun in-position-for-matches-any (list number count)
(if list
(if (matches-first-p list number)
count
(in-position-for-matches-any (rest list) number (+ 1 count)))))

;; in terms of car and cdr...
(defun my-fourth (list)
(car (cdr (cdr (cdr list) ))))

(defun max-of-two-args (first second)
(if (> first second)
first
second))

(defun print-n-dots (n)
(if (> n 0)
(let* ((new (1- n)))
(format t ".")
(print-n-dots new))))

;; You might be correct in thinking this coding style looks a little stilted.
;; We'll be able to do a cleaner job after this week...
(defun count-symbol-a (list)
(if list
(let* ((this (if (equal (first list) 'a)
1
0)))
(+ this
(count-symbol-a (rest list))))
0))

;; needed correcting: there was no termination condition
(defun summit (list)
(if list
(let* ((x (car list)))
(if (null x)
(summit (cdr list))
(+ x (summit (cdr list)))))
0))

(defun better-maximum (list)
;; nick 2000-10-24 check for empty starting list!
(if list
(in-better-maximum (first list) (rest list))))

;; helper function for better-maximum
(defun in-better-maximum (previous-best list)
(if list
(let* ((next (first list))
(rest (rest list)))
(in-better-maximum (max-of-two-args next previous-best) rest))
previous-best))

(defun final-cons (list)
(car (last list)))

If you have tried the exercises, looked at the solutions and still do not understand what's going on, I am available for consultation at the times advertised on my office door. Bring your code with you in BOTH the following forms:

• Logbook containing printout (nothing handwritten please)
• file on floppy

Nick Levine