Graph-Traversal

Durchläuft und optional transformiert einen Graphen.
$root.traverse(
    descend: node -> parent -> lastResult -> { ... }, 
    mapping: node -> parent -> lastResult -> { ... }, 
    compose: result -> childResults -> node -> parent -> { ... }
)

Die Durchquerung erfolgt in der folgenden Reihenfolge:

  1. Der Wurzelknoten wird besucht, indem die Funktion mapping auf ihn angewendet wird. Das Ergebnis des Besuchs wird in Schritt 4 verwendet.
  2. Es werden die nächsten zu besuchenden Knoten berechnet, indem die Funktion descend auf den aktuellen Knoten angewendet wird.
  3. Alle folgenden Knoten werden auf die gleiche Weise rekursiv verarbeitet.
  4. 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 von compose liefert das Endergebnis von traverse. Wird keine Funktion compose angegeben, ist das Ergebnis von traverse das Ergebnis, das durch die mapping 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 Funktion mapping 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.