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.