2013-05-05 8 views
5

Ich habe eine Datenstruktur, die eine Typ-Signatur darstellt, diese Datenstruktur ist ein Baum im ersten Bild als das rote beispielhaft dargestellt. Ich würde gerne das Schwarze bekommen und bisher habe ich nur das Orange (zweites Bild), welches der Typbaum ist, aber links zugeordnet ist.Umschreiben von Bäumen

enter image description here

Hier ist der Orangenbaum ich bisher bekommen habe (folgen Sie den orangefarbenen Pfeilen)

enter image description here

ich ziemlich Druck auf den Baum dieses Problem gelöst hatte und es dann mit einem Parsing Parser-Kombinator, aber diese Ineffizienz ist nicht erwünscht. Ich denke, dass ich einen anderen Algorithmus haben kann, um vom Orangenbaum in den Schwarzen zu konvertieren, aber es wäre besser, wenn ich statt zwei Algorithmen nur einen schreiben könnte.

Ich werde dies als Haskell markieren, wie ich meine Lösung darauf schreibe. Ich könnte Code zur Verfügung stellen, um eine Datenstruktur wie der rote Baum zu erhalten, aber ich denke, dass es den Versuch auf der Lösung nur verkomplizieren würde.

Ich möchte wissen, ob es einen Namen für diesen Algorithmus und/oder was der Name gibt der Bedienerposition im roten Baum ist. Ist es ein Präfix?

Danke.

+7

Was Sie haben, ist '(a -> b) -> c'. Was du hast, ist '(a -> b) -> c'. Was Sie wollen, ist 'a -> (b -> c)'. Ich glaube, Sie haben einen Fehler gemacht, als Sie entschieden haben, welches Ergebnis Sie wollen. –

+0

@DanielFischer In der Tat, ich habe mich jetzt entschieden, das Ergebnis, das ich wollte, mit Hilfe von Stacks dabei zu haben, danke fürs Durchlesen meiner Sauerei –

Antwort

4

Sehen Sie sich die Rekursionschemata an. Es gibt eine ähnliche Frage hier, die Lasten von Links enthält:

Recursion schemes for dummies?

Alle Links zu dieser Frage sind ausgezeichnet, aber ich würde besonders Blick auf Tim Williams' Dias (Link in meiner Antwort auf diese Frage) für konkrete Implementierungen der verschiedenen Rekursionsmuster (von denen die meisten in Baumstrukturen demonstriert werden).