Кто-то может переписать этот (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 часов, а использование памяти невелико.