2010-10-21

問題1.18

(5am:test exercise-1.18
  (5am:is (= 0 (multi 1 0)))
  (5am:is (= 6 (multi 2 3)))
  (5am:is (= (multi 4 5)
             (multi 5 4))))

(defun double (x)
  (* x 2))

(defun halve (x)
  (/ x 2))

(defun multi-iter (a b r)
  (cond ((zerop b) r)
        ((evenp b) (multi-iter (double a) (halve b) r))
        (t (multi-iter a (1- b) (+ r a)))))

(defun multi (a b)
  (multi-iter a b 0))

1 件のコメント: