tkf*_*tkf 17 scheme tail-recursion clojure tail-call-optimization
有人可以将此(plt)Scheme代码重写为Clojure吗?
(define (f n)
(printf "(f ~a)~n" n)
(g n))
(define (g n)
(printf "(g ~a)~n" n)
(h n))
(define (h n)
(printf "(h ~a)~n" n)
(f (+ n 1)))
Run Code Online (Sandbox Code Playgroud)
以这种方式不会将程序f,g和h一起折叠并允许代码无限期地运行而不会崩溃?
Nat*_*hes 30
使用蹦床:
(declare f)
(defn h [n]
(println "(h " n ")")
#(f (+ n 1)))
(defn g [n]
(println "(g " n ")")
#(h n))
(defn f [n]
(println "(f " n ")")
#(g n))
Run Code Online (Sandbox Code Playgroud)
踢它:
(trampoline f 0)
Run Code Online (Sandbox Code Playgroud)
我已经在我的电脑上在后台运行了这个代码大约5个小时,内存使用率是平的.