Rekursion
Syntax
$start.recursion($fun)
$start.recursion($fun, $min-depth, $max-depth)
Beschreibung
Erstellt eine Liste, indem die Funktion fun auf jedes Element der Menge start angewendet wird und rekursiv auf alle ihre Funktionsergebnisse. Die Rekursion endet, wenn die Funktion null, oder ein vorheriges Ergebnis erneut erzeugt. Im Auswertungsergebnis werden nur die Elemente zurückgegeben, die sich aus Rekursionstiefen zwischen min-depth (inklusive) und max-depth (exklusiv) ergeben.
Parameter
| Name | Typ | Beschreibung | Pflicht | Default |
|---|---|---|---|---|
| start | Zahl/Zeichenkette/Wahrheitswert/Fachobjekt/Menge | Der Startwert, bzw. die Startwerte der Rekurssion, wenn sie in einer Menge angegeben werden. | ja | |
| fun | Funktion | Eine Funktion, die rekursiv auf start und die daraus resultierenden Ergebnisse ausgeführt werden soll. |
ja | |
| min-depth | Zahl | Die minimale Rekursionstiefe (inklusiv). | nein | 0 |
| max-depth | Zahl | Die maximale Rekursionstiefe (exklusiv). | nein | -1 (unendlich) |
Rückgabewert
Typ: Menge
Eine Menge bestehend aus start und allen Funktionsergebnissen ab einer minimalen bis zu einer maximalen Rekursionstiefe.
Beispiele
Hochzählen
1.recursion(x -> $x + 1, 0, 9)
Ausgabe: Eine Menge mit den Werten [1, 2, 3, 4, 5, 6, 7, 8, 9].
Ausgehend von 1 wird die Funktion, die einen Wert um 1 erhöht 9 mal angewendet. Alle Ergebnisse werden in der Ergebnisliste zurückgegeben.
Achtung: Dasselbe Ergebnis kann über den Ausdruck count(1, 10) wesentlich einfacher und effizienter erreicht werden, siehe Aufzählung.
Pfade
$x.recursion(node -> $node.get(`my:Type#parent`), 1)
Ausgabe: Der Pfad ausgehend von einem Element in der Variablen x bis zur Wurzel eines Baumes entlang des Elternattributs my:Type#parent.
Der Pfad beginnt mit dem direkten Elternteil von x. Der Wert von x ist selbst nicht im Pfad enthalten, weil die minimale Tiefe (Anzahl der Funktionsanwendungen) auf 1 eingestellt ist.