2010-02-02 3 views
17

누군가이 (plt) Scheme 코드를 Clojure로 다시 작성할 수 있습니까? 함께 절차 F, G 및 H를 축소하지와 코드가 충돌없이 불명확하게 실행할 수 있도록하는 방식으로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))) 

?

답변

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

킥을 해제 : 지금 약 5 시간 동안 백그라운드에서 내 PC에서 실행되는 코드를 했어

(trampoline f 0) 

및 메모리 사용량입니다 플랫.