Seq.unfold<'State,'T>-Funktion (F#)
Gibt eine Sequenz zurück, die die Elemente enthält, die durch die angegebene Berechnung generiert werden.
Namespace/Modulpfad: Microsoft.FSharp.Collections.Seq
Assembly: FSharp.Core (in FSharp.Core.dll)
// Signature: Seq.unfold : ('State -> ('T * 'State) option) -> 'State -> seq<'T> // Usage: Seq.unfold generator state
Parameter
generator
Typ: 'State -> 'T * 'State optionEine Funktion, die den aktuellen Zustand übernimmt und ein Optionstupel des nächsten Elements der Sequenz sowie den nächsten Zustandswert zurückgibt.
state
Typ: 'StateDer ursprüngliche Zustandswert.
Rückgabewert
Die Ergebnissequenz.
Hinweise
Das angegebene anfängliche state-Argument wird an den Elementgenerator übergeben. Für jedes IEnumerator werden bei Bedarf Elemente im Stream durch Anwenden des Elementgenerators generiert, bis der Elementgenerator einen None-Wert zurückgibt. Jeder Aufruf des Elementgenerators gibt einen neuen verbleibenden state-Wert zurück.
Der Stream wird bei jedem Anfordern und Durchlaufen von IEnumerator für die Sequenz neu berechnet. Die zurückgegebene Sequenz kann zwischen Threads sicher übergeben werden. Auf einzelne IEnumerator-Werte, die von der zurückgegebenen Sequenz generiert wurden, sollte jedoch nicht gleichzeitig zugegriffen werden.
Der Name dieser Funktion in kompilierten Assemblys lautet Unfold. Verwenden Sie diesen Namen, wenn Sie in einer anderen Sprache als F# oder durch Reflektion auf die Funktion zugreifen.
Beispiel
Der folgende Code veranschaulicht die Verwendung von Seq.unfold, um zwei Sequenzen zu generieren. Zunächst wird einfach eine Sequenz von ganzen Zahlen generiert. Anschließend wird eine Sequenz von Fibonacci-Zahlen generiert, die sich durch Addieren der beiden vorherigen Zahlen in der Sequenz ergeben. Die ersten beiden Zahlen in der Fibonacci-Sequenz sind (1, 1), die den anfänglichen state-Parameter bilden. Der Zustand bei den einzelnen Schritten besteht aus den beiden Zahlen, deren Summe die nächste Fibonacci-Zahl erzeugt.
let seq1 = Seq.unfold (fun state -> if (state > 20) then None else Some(state, state + 1)) 0
printfn "The sequence seq1 contains numbers from 0 to 20."
for x in seq1 do printf "%d " x
let fib = Seq.unfold (fun state ->
if (snd state > 1000) then None
else Some(fst state + snd state, (snd state, fst state + snd state))) (1,1)
printfn "\nThe sequence fib contains Fibonacci numbers."
for x in fib do printf "%d " x
Plattformen
Windows 8, Windows 7, Windows Server 2012, Windows Server 2008 R2
Versionsinformationen
F#-Kernbibliotheksversionen
Unterstützt in: 2.0, 4.0, Portable