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
mapping
auf ihn angewendet wird. Das Ergebnis des Besuchs wird in Schritt 4 verwendet. - Es werden die nächsten zu besuchenden Knoten berechnet, indem die Funktion
descend
auf den aktuellen Knoten angewendet wird. - Alle folgenden Knoten werden auf die gleiche Weise rekursiv verarbeitet.
- Wenn die Rekursion zurückkehrt, wird die optionale Funktion
compose
auf die Ergebnisse angewendet, die für den aktuellen Knoten und alle seine Kindknoten erzeugt wurden. Das Ergebnis voncompose
liefert das Endergebnis vontraverse
. Wird keine Funktioncompose
angegeben, ist das Ergebnis vontraverse
das Ergebnis, das durch diemapping
Funktion 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 (
, node
parent
, 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 (
, result
childResults
, 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 Funktionmapping
fü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.