¿Eliminación de llamadas de cola en Clojure?
scheme tail-recursion (1)
Use un trampolín:
(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))
Comience con:
(trampoline f 0)
He tenido este código ejecutándose en mi PC en segundo plano durante aproximadamente 5 horas y el uso de la memoria es simple.
¿Alguien puede reescribir este código de Esquema (plt) en 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)))
¿De tal manera que no colapsen los procedimientos f, g y h juntos y permitan que el código se ejecute indefinidamente sin fallar?