J'essaie de comprendre la corécursion dans Clojure avec des exemples non triviaux (c'est-à-dire non-Fibonacci), mais gérables. Apparemment, il est possible d'implémenter une traversée d'arbre binaire avec corecursion. Wikipedia a un exemple en Python que je suis incapable de comprendre.Traversée d'arbres avec corecursion
Comment puis-je l'implémenter dans Clojure? Disons que je suis à la recherche de BFS, mais cela pourrait être n'importe quel ordre.
Voici ce que j'ai jusqu'à présent:
(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))
Malheureusement, il semble aller tout le chemin à gauche, en ignorant la branche droite.
Pouvez-vous lier au code python, ou donner plus de détails sur ce que vous essayez exactement de faire le code? Coller du code cassé ne fournit pas suffisamment d'informations. ;) Sur une note potentiellement liée, 'letfn' fournit un moyen de faire une récurrence mutuelle. –
@ataggart: http://en.wikipedia.org/wiki/Corecursion –
Données insuffisantes pour une réponse significative. –