Die Funktion "Fold"
In der Referenz finden Sie folgende Beschreibung für diese Funktion:
Fold | |||
---|---|---|---|
Liste.Fold[Funktion;Startwert] | |||
Ergebnistyp | Parameter | Modul | Resultat |
Objekt | Funktion Startwert | Die <Funktion> wird nacheinander auf jedes Listenelement im zweiten Argument und dem vorherigen Funktionsergebnis (beim ersten Mal dem <Startwert>) im ersten Argument angewendet. Gesamtergebnis ist das Ergebnis der letzten Auswertung. Die Iteratorfunktion "Fold" ist sehr abstrakt und vielseitig, da die Zwischenergebnisse einen beliebigen Objekttyp haben können (z. B. Listen, Zeitreihen). |
Beispiel 1
List(1;2;3).Fold[#Plus;0]
Dieses Beispiel liefert die Summe der Zahlen in der Liste, also (((0 + 1) + 2) + 3) = 6.
Beispiel 2
$Liste.Fold[#Append;EmptyList]
Dieses Beispiel fügt alle Listen zusammen, liefert also dasselbe wie "$Liste.Concatenate".
Neben diesen Beispielen lassen sich für die Funktion "Fold" auch Fälle konstruieren, in denen die Reihenfolge der Parameter eine Rolle spielt. Wenn man zwei Vektoren hat (in Form von zwei gleich langen Listen von Zahlen) kann man mit der Funktion "Fold" deren Euklidische Distanz errechnen (sozusagen den Abstand zweier Punkte). Als Beispiel kann die Korrelationsmatrix im Infront Portfolio Manager dienen:
$list1.length.makelist.fold[
#[$idx](object + ($list1.nth[$idx] - $list2.nth[$idx]).expX[2]);0].sqrt
Dabei wird praktisch eine For-Schleife realisiert.