17

誰かがこの (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 を一緒に折りたたまず、クラッシュすることなくコードを無期限に実行できるようにする方法は?

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)

このコードを PC でバックグラウンドで約 5 時間実行しましたが、メモリ使用量は横ばいでした。

于 2010-02-02T04:46:26.827 に答える