Frage

Die Struktur Zipper Daten ist groß, wenn man will, einen Baum zu durchqueren und die aktuelle Position zu halten, aber welche Datenstruktur sollte man verwenden, wenn sie mehr als eine Position verfolgen mögen?

Lassen Sie mich erklären mit Beispielen:

  • Jemand auf dem #haskell Kanal hat mir gesagt, dass Reißverschluss in yi-Editor verwendet werden, zu vertreten die Cursorposition. Das ist großartig, aber was, wenn Sie zwei haben Cursor. Wie, wenn Sie eine Auswahl darstellen möchten, müssen Sie den Anfang kennen und das Ende der Auswahl.
  • Im Minotaur Beispiel auf wikibooks, sie Zipper verwenden Minotaur Position innerhalb des Labyrinths zu repräsentieren. Wenn ich wollte Feind in das Labyrinth fügen, was ihre Position mit einem Reißverschluss würde so viel Sinn machen.
  • Letzte ist actualy von meinem Mini-Projekt, wo alles beginnt: Im Rahmen Haskell des Lernens Ich versuche, eine Baumstruktur mit kairo und gth2hs sichtbar zu machen. Das hat bisher gut gegangen, aber jetzt würde Ich mag eine oder mehrere der Knoten auszuwählen und zu z.B. der Lage sein, sie bewegen. Weil es dann eine der ausgewählten Knoten mehr sein kann, kann ich nicht nur nutzen der Reißverschluss wie in Text Büchern definiert.

Es ist eine triviale (naive?) Lösung, ähnlich dem sie in frühen Versionen von XMonad verwendet hatte, die wie erläutert endliche Karten beinhaltet hier .

Das heißt, zum Beispiel bei meinem Beispiel Projekt, würde ich die ausgewählten Knoten in einer indexierten Karte speichern und ihre Darstellung mit dem Indizes in der Hauptstruktur ersetzen. Aber diese Lösung hat viele Nachteile. Wie die, die in den obigen Link erklärt, oder sagen, wieder bei meinem Beispiel alle Knoten Abwählen erfordern würde den ganzen Baum zu suchen.

War es hilfreich?

Lösung

Andere Tipps

Siehe dieses Papier . Ich scheine irgendwo wieder zu lesen, dass die zweite Ableitung zwei Löcher hat, was wahrscheinlich ist, was Sie wollen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top