Seq.unfold<'State,'T>-Funktion (F#)
Gibt eine Sequenz zurück, die die von der angegebenen Berechnung generierten Elemente enthält.
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 als Eingabe akzeptiert und ein Optionstupel aus dem nächsten Element der Sequenz und dem nächsten Zustandswert zurückgibt.
state
Typ: 'StateDer Anfangszustandswert.
Rückgabewert
Die Ergebnissequenz.
Hinweise
Das angegebene erste state-Argument wird an den Element-Generator übergeben. Für jeden IEnumerator im Stream werden Elemente durch Anwenden des Element-Generators nach Bedarf generiert, bis vom Element-Generator der Wert None zurückgegeben wird. Jeder Aufruf des Element-Generators gibt ein neues state-Restelement zurück.
Der Stream wird immer neu berechnet, wenn ein IEnumerator angefordert und für die Sequenz durchlaufen wird. Die zurückgegebene Sequenz kann zwischen Threads sicher übergeben werden. Auf einzelne IEnumerator-Werte, die aus der zurückgegebenen Sequenz generiert werden, sollte nicht gleichzeitig zugegriffen werden.
Der Name dieser Funktion in kompilierten Assemblys lautet Unfold. Verwenden Sie diesen Namen, wenn Sie in einer anderen .NET-Sprache als F# oder durch Reflektion auf die Funktion zugreifen.
Beispiel
Der folgende Code veranschaulicht die Verwendung von Seq.unfold zum Generieren von zwei Sequenzen. Das erste generiert nur eine Sequenz von ganzen Zahlen. Der zweite Teil generiert eine Sequenz von Fibonacci-Zahlen, die geschrieben werden, indem Sie die vorherigen zwei Zahlen in der Sequenz hinzufügen. Die ersten beiden Zahlen in der Fibonacci-Sequenz sind (1, 1), was den anfänglichen state-Parameter darstellt. Der Zustand an jedem Schritt besteht aus zwei 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 7, Windows Vista SP2, Windows XP SP3, Windows XP x64 SP2, Windows Server 2008 R2, Windows Server 2008 SP2, Windows Server 2003 SP2
Versionsinformationen
F#-Runtime
Unterstützt in: 2.0, 4.0
Silverlight
Unterstützt in: 3