名前付きlet、ふたたび。
名前付きletがなかなか腑に落ちないので、名前付きlet使って階乗計算(ローカル手続きで末尾再帰)やってみた。
gosh> (use srfi-1) #<undef> gosh> (define fact-named-let (lambda (n) (let f ((m n) (cont (lambda (_) _))) (if (= m 0) (cont 1) (f (- m 1) (lambda (x) (cont (* m x)))))))) fact-named-let gosh> (map fact-named-let (iota 10 1)) (1 2 6 24 120 720 5040 40320 362880 3628800)
よかろうもん。
mとcontが常にnと(lambda (_) _)になるような気がして
((m n) (cont (lambda (_) _)))
を書くときに不安になったりならなかったり。