17

有人可以将此(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)))

以不将过程 f、g 和 h 折叠在一起并允许代码无限期运行而不会崩溃的方式?

4

1 回答 1

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))

开始:

(trampoline f 0)

我已经让这段代码在我的电脑上在后台运行了大约 5 个小时,并且内存使用量是平稳的。

于 2010-02-02T04:46:26.827 回答