05/06/07 18:27:00
>>249
> なんかこう、高度なというか表現力や抽象化能力の高い道具が
> 問題の本質を逆に隠してしまっていたような、そんな気がします
そんなことないよ。>>220 の labels を分解して
(defun tarai (x y z)
(labels ((tarai-1 (x y fz) (if (<= x y) y
(tarai-2 x y (funcall fz))))
(tarai-2 (x y z) (if (<= x y) y
(tarai-1 (tarai-2 (1- x) y z)
(tarai-2 (1- y) z x)
(lambda () (tarai-2 (1- z) x y))))))
(tarai-2 x y z)))
tarai-1 をインライン展開して
(defun tarai (x y z)
(labels ((tarai-2 (x y z)
(if (<= x y) y
(let ((xx (tarai-2 (1- x) y z)) (yy (tarai-2 (1- y) z x)))
(if (<= xx yy) yy
(tarai-2 xx yy (funcall (lambda ()
(tarai-2 (1- z) x y)))))))))
(tarai-2 x y z)))