Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure中的尾部调用消除?_Clojure_Scheme_Tail Recursion_Tail Call Optimization - Fatal编程技术网

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]

有人能把这个(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]
   (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个小时了,内存使用率是持平的