Я пытаюсь выяснить, что корунсирование в Clojure с нетривиальным (т. Е. Не Фибоначчи), но управляемыми примерами. По-видимому, можно реализовать двоичный обход дерева с помощью корекурсии. В Википедии есть пример в Python, который я не могу понять.Обход дерева с corecursion
Как я могу реализовать его в Clojure? Предположим, я ищу BFS, но это может быть любой порядок.
Вот что я до сих пор:
(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))
К сожалению, это, кажется, пройдя весь путь налево, не обращая внимания на правую ветвь.
Можете ли вы ссылаться на код python или дать более подробную информацию о том, что именно вы пытаетесь получить код? Вставка сломанного кода не обеспечивает достаточного понимания. ;) В отношении потенциально связанной заметки 'letfn' обеспечивает способ выполнения взаимной рекурсии. –
@ataggart: http://en.wikipedia.org/wiki/Corecursion –
Недостаточно данных для значимого ответа. –