Estoy intentando averiguar corecursion en Clojure con ejemplos no triviales (es decir, no Fibonacci) pero manejables. Aparentemente es posible implementar el cruce de árbol binario con corecursion. Wikipedia tiene un ejemplo en Python que no puedo entender.Traversal de árbol con corecursion
¿Cómo puedo implementarlo en Clojure? Digamos que estoy buscando BFS, pero podría ser cualquier orden.
Esto es lo que tengo hasta ahora:
(defstruct tree :val :left :right)
(def my-tree (struct tree 1 (struct tree 2) (struct tree 3 4 5)))
(def bfs (lazy-cat [my-tree] (map #(:left %) bfs) (map #(:right %) bfs)))
(println (take 4 bfs))
Por desgracia, parece ir todo el camino a la izquierda, haciendo caso omiso de la rama derecha.
¿Puedes vincular al código python o dar más detalles sobre qué es exactamente lo que intentas hacer con el código? Pegar código roto no proporciona suficiente información. ;) En una nota potencialmente relacionada, 'letfn' proporciona una forma de hacer la recursión mutua. –
@ataggart: http://en.wikipedia.org/wiki/Corecursion –
Datos insuficientes para una respuesta significativa. –