Clojure中的尾部调用消除?
有人能把这个(plt)方案代码重写成Clojure吗Clojure中的尾部调用消除?,clojure,scheme,tail-recursion,tail-call-optimization,Clojure,Scheme,Tail Recursion,Tail Call Optimization,有人能把这个(plt)方案代码重写成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))) 以避免将过程f、g和h折叠在一起,并允许代码无限期运行而不会崩溃的方式?使用蹦床: (declare f) (defn h [n]
(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)))
以避免将过程f、g和h折叠在一起,并允许代码无限期运行而不会崩溃的方式?使用蹦床:
(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))
从以下几点开始:
(trampoline f 0)
我已经让这段代码在我的电脑上后台运行了大约5个小时了,内存使用率是持平的