Partager via


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

Retourne une séquence contenant 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 suivant.

  • state
    Type : 'State

    Valeur d'état initial.

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 nouveau 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é. Cependant, 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 des assemblys compilés. Si vous accédez à la fonction depuis un autre langage que F#, ou par réflexion, utilisez ce nom.

Exemple

Le code suivant montre 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 suite de nombres de Fibonacci, qui sont formés par l'ajout des deux nombres précédents de la séquence. Les deux premiers nombres de la suite 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 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 8, Windows 7, Windows Server 2012, Windows Server 2008 R2

Informations de version

Version de bibliothèque principale F#

Prise en charge dans : 2.0, 4.0, portables

Voir aussi

Référence

Collections.Seq, module (F#)

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