Partager via


Seq.unfold<'State,'T>, fonction (F#)

Retourne une séquence qui contient les éléments générés par le calcul donné.

Espace de noms/Chemin du module : 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

Paramètres

  • generator
    Type : 'State -> 'T * 'State option

    Fonction qui prend l'état actuel et retourne un tuple d'option de l'élément suivant de la séquence et de la valeur d'état suivante.

  • state
    Type : 'State

    Valeur d'état initiale.

Valeur de retour

Séquence de résultat.

Notes

L'argument state initial donné est passé au générateur d'élément. Pour chaque IEnumerator, les éléments dans le flux de données sont générés à la demande en appliquant le générateur d'élément, jusqu'à ce qu'une valeur None soit retournée par le générateur d'élément. Chaque appel au générateur d'élément retourne un nouvel state résiduel.

Le flux de données est recalculé chaque fois qu'un IEnumerator est demandé et itéré pour la séquence. La séquence retournée peut être passée entre les threads en toute sécurité. Toutefois, les valeurs IEnumerator individuelles générées à partir de la séquence retournée ne doivent pas être accessibles simultanément.

Cette fonction se nomme Unfold dans les assemblys compilés. Si vous accédez à la fonction à partir d'un langage autre que F# ou par réflexion, utilisez ce nom.

Exemple

Le code suivant illustre l'utilisation de Seq.unfold pour générer deux séquences. Le premier génère simplement une séquence d'entiers. Le deuxième génère une séquence de nombres de Fibonacci, qui sont composés en ajoutant des deux nombres précédents dans la séquence. Les deux premiers numéros dans la séquence de Fibonacci sont (1, 1), qui forme le paramètre state d'origine. L'état à chaque étape se compose des deux nombres dont la somme génère le nombre de Fibonacci suivant.

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
        

Plateformes

Windows 7, Windows Vista SP2, Windows XP SP3, Windows XP x64 SP2, Windows Server 2008 R2, Windows Server 2008 SP2, Windows Server 2003 SP2

Informations de version

Runtime F#

Pris en charge dans : 2.0, 4.0

Silverlight

Prise en charge dans : 3

Voir aussi

Référence

Collections.Seq, module (F#)

Microsoft.FSharp.Collections, espace de noms (F#)