Date: Wed, 08 Jan 1997 21:25:44 GMT Server: NCSA/1.4.2 Content-type: text/html LISP quiz sample solution
  1. Postscript picture

  2. (a)
    Y is 1
    Y is 8
    Y is 4
    (b)
    26
    (c)
    x = 3
    y = 8
    z = unbound variable

  3. (defun print-negative-numbers (l)
      (cond ((null l) nil)
    	(T (let ((tmp (car l)))
    	     (when (and (numberp tmp) (> 0 tmp))
    	       (format t "~a~%" tmp))
    	     (print-negative-numbers (cdr l))))))  

  4. (defun ascending-order-p (l)
      (cond ((null l) T)
    	(T (ascending-order-p-helper (car l) (cdr l)))))
    
    (defun ascending-order-p-helper (prev l)
      (cond ((null l) T)
    	(T (let ((new-val (car l)))
    	     (and (< prev new-val)
    		  (ascending-order-p-helper new-val (cdr l)))))))
    

  5. (a)
    (defun account-numbers (a-bank)
      (mapcar #'(lambda (an-acct) (account-number an-acct))
    	  (bank-accounts a-bank)))
    

    (b)
    (defun find-account (a-bank account-number)
      (find-if #'(lambda (an-acct) 
    	       (= (account-number an-acct) account-number))
    	   (bank-accounts a-bank)))
    

    (c)
    (defun make-interest-payer (a-bank account-number)
      (let ((the-acct (find-account a-bank account-number)))
        (cond ((eq nil the-acct) #'(lambda (x) ))
    	  (T #'(lambda (interest)
    		 (setf (account-balance the-acct)
    	  	   (* (+ 1 interest) (account-balance the-acct))))))))
    

    (d)
    (defun pay-interest (a-bank amount)
      (mapc #'(lambda (acct-number)
    	    (funcall (make-interest-payer a-bank acct-number)
    		     amount))
    	(account-numbers a-bank)))
    


cse341-webmaster@cs.washington.edu