04/02/28 17:07
>>225
末尾呼び出しを思いっきり使えるかどうかって、
コーティングスタイルがまるで変わってくると思うんですが、
>URLリンク(www.swiss.ai.mit.edu)
(define (cpstak x y z)
(define (tak x y z k)
(if (not (< y x))
(k z)
(tak (- x 1)
y
z
(lambda (v1)
(tak (- y 1)
z
x
(lambda (v2)
(tak (- z 1)
x
y
(lambda (v3)
(tak v1 v2 v3 k)))))))))
(tak x y z (lambda (a) a)))
;;; call: (cpstak 18 12 6)
たとえばこういう内包挟んだ末尾再帰もCommonLispコンパイラが
ちゃんと末尾として認識するのかなと。