05/06/01 12:52:55
ところで,Common Lisp で,末尾再帰の最適化をやってくれる処理系って,ど
んなものがあるでしょうか?xyzzy がバージョンアップしたみたいなので,試
してみたのだけど,やっぱりスタック数40,000 程度でオーバーフロー.
(defun tail-rec (x y)
(if (<= x 0)
y
(tail-rec (- x 1) (+ y 1))))
(tail-rec 40000 0) => オーバーフロー
Petite Chez Scheme だったら 100,000,000 でも軽々動くのに.こういうのは
再帰にせず,堂々と loop で書くのが Common Lisp 的なのだろうか.
(define (tail-rec x y)
(if (<= x 0)
y
(tail-rec (1- x) (1+ y)))
(tail-rec 100000000 0) => 100000000