Share via


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 option

    Eine 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: 'State

    Der 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

Siehe auch

Weitere Ressourcen

Collections.Seq-Modul (F#)

Microsoft.FSharp.Collections-Namespace (F#)