Graph-Traversal
$root.traverse(
descend: node -> parent -> lastResult -> { ... },
mapping: node -> parent -> lastResult -> { ... },
compose: result -> childResults -> node -> parent -> { ... }
)
Die Durchquerung erfolgt in der folgenden Reihenfolge:
- Der Wurzelknoten wird besucht, indem die Funktion
mappingauf ihn angewendet wird. Das Ergebnis des Besuchs wird in Schritt 4 verwendet. - Es werden die nächsten zu besuchenden Knoten berechnet, indem die Funktion
descendauf den aktuellen Knoten angewendet wird. - Alle folgenden Knoten werden auf die gleiche Weise rekursiv verarbeitet.
- Wenn die Rekursion zurückkehrt, wird die optionale Funktion
composeauf die Ergebnisse angewendet, die für den aktuellen Knoten und alle seine Kindknoten erzeugt wurden. Das Ergebnis voncomposeliefert das Endergebnis vontraverse. Wird keine Funktioncomposeangegeben, ist das Ergebnis vontraversedas Ergebnis, das durch diemappingFunktion für den Wurzelknoten erzeugt wurde.
Parameter root
Typ: Beliebiges Objekt.
Die Durchquerung des Graphen startet mit diesem Objekt.
Parameter descend (obligatorisch)
Typ: Funktion mit bis zu drei Argumenten (node, parent, lastResult).
Der Abstieg im Graphen wird durch die Funktion descend spezifiziert, die die nächsten zu besuchenden Knoten nach dem aktuellen Knoten berechnet. Die Funktion descend akzeptiert den aktuellen Knoten und optional den übergeordneten Knoten sowie das letzte Ergebnis des Besuchs (lastResult). Das letzte Ergebnis ist die Rückgabe der Funktion mapping, wenn ein Knoten mehr als einmal gefunden wird (ansonsten null). Das Argument lastResult kann verwendet werden, um den Besuch zu stoppen, um eine endlose Rekursion zu verhindern, wenn ein zyklischer Graph durchlaufen wird (oder den Besuch abzukürzen, wenn ein gerichteter azyklischer Graph durchsucht wird).
Parameter mapping (obligatorisch)
Typ: Funktion mit bis zu drei Argumenten (, nodeparent, lastResult).
Die Abbildung erzeugt das Ergebnis des Besuchs eines Knotens. Wenn traverse in einer Transaktion verwendet wird, kann hier Operation auf einem Knoten ausgeführt werden.Wenn mapping nicht angegeben wird, ist das Ergebnis des Besuchs der besuchte Knoten selbst.
Parameter compose (optional)
Typ: Funktion mit bis zu vier Argumenten (, resultchildResults, node, parent).
Die Funktion erzeugt das endgültige Ergebnis von traverse, nachdem das Abbildungsergebnis eines Knotens und seiner Kinder verfügbar ist. Wenn compose nicht angegeben wird, ist das Ergebnis der Transformationsoperation das Ergebnis der auf den Wurzelknoten angewandten Abbildungsfunktion.
Die Parameter von compose sind:
result: Das Ergebnis, das von der Funktionmappingfür den aktuellen Knoten erzeugt wurde.childResults: Eine Liste mit den Ergebnissen, die für jedes besuchte Kind des aktuellen Knotens erzeugt wurden.node: Der aktuelle Knoten.parent: Der übergeordnete Knoten des aktuellen Knotens.