by shigemk2

当面は技術的なことしか書かない

対話によるCommon Lisp入門 51 gcd

gcd関数を再定義しつつ、
それをletを使ってもう一度再定義する

;; 何度もgcd*を呼び出すのはすっきりしない
(defun gcd* (x y)
    (if (= (mod x y) 0) y
        (gcd* y (mod x y))))

(print (gcd* 10 8)) ;; 2


(defun gcd** (x y)
  (let ((r (mod x y)))
    (if (= r 0) y
        (gcd** y r))))

(print (gcd** 10 8)) ;; 2