Tree-Traversal mit Corecursion

8

Ich versuche, in Clojure mit nichttrivialen (d. h. nicht Fibonacci), aber überschaubaren Beispielen, eine Korrekur zu finden. Anscheinend ist es möglich, Binärbaum-Traversal mit Corecursion zu implementieren. Wikipedia hat ein Beispiel in Python, das ich nicht verstehen kann.

Wie kann ich es in Clojure implementieren? Nehmen wir an, ich suche nach BFS, aber es könnte eine beliebige Reihenfolge sein.

Folgendes habe ich bisher:

%Vor%

Leider scheint es den ganzen Weg nach links zu gehen, den rechten Zweig ignorierend.

    
Konrad Garus 22.07.2010, 19:26
quelle

2 Antworten

8

Wenn Michals Code das tut, was Sie wollen, funktioniert das auch:

%Vor%     
Alex Taggart 23.07.2010, 06:33
quelle
2

Hier ist eine direkte Übersetzung der Funktion bftrav Haskell aus dem Wikipedia-Artikel. Beachten Sie, dass es ein letrec Makro verwendet, das ich gerade geschrieben habe - siehe diesen Gist für die neueste Version.

Ich habe Ihre Definition von my-tree geändert, um so zu lesen:

%Vor%

Auch meine leaf? -Funktion setzt voraus, dass es sich nur um echte Zweiwege-Zweige und Blattknoten handelt (ein nil im Zweig :left bedeutet also nil im Zweig :right ) ; Es sollte nicht schwierig sein, dies zu ändern, um Single-Child-Zweige zu behandeln:

%Vor%

Der Code für bftrav lautet wie folgt:

%Vor%

Ein Beispiel aus der REPL:

%Vor%     
Michał Marczyk 23.07.2010 05:34
quelle

Tags und Links