Condividi tramite


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

Restituisce una sequenza che contiene gli elementi generati dal calcolo specificato.

Percorso spazio dei nomi/modulo: 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

Parametri

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

    Funzione che utilizza lo stato corrente e restituisce una tupla di opzione dell'elemento successivo della sequenza e il successivo valore di stato.

  • state
    Tipo: 'State

    Valore di stato iniziale.

Valore restituito

Sequenza risultante.

Note

L'argomento state iniziale specificato viene passato al generatore di elementi. Per ogni IEnumerator vengono generati su richiesta elementi nel flusso applicando il generatore di elementi, finché quest'ultimo non restituisce un valore None. Ogni chiamata al generatore di elementi restituisce un nuovo elemento state residuo.

Il flusso verrà ricalcolato ogni volta che un IEnumerator viene richiesto e iterato per la sequenza. La sequenza restituita può essere passata in modo sicuro tra thread. L'accesso ai singoli valori IEnumerator generati dalla sequenza restituita non deve essere tuttavia eseguito in modo simultaneo.

Questa funzione è denominata Unfold negli assembly compilati. Utilizzare questo nome se si accede alla funzione da un linguaggio diverso da F# o tramite reflection.

Esempio

Nell'esempio di codice riportato di seguito viene illustrato come utilizzare Seq.unfold per generare due sequenze. Il primo genera semplicemente una sequenza di numeri interi. Il secondo genera una sequenza di numeri di Fibonacci, costituiti aggiungendo i due numeri precedenti nella sequenza. I primi due numeri nella sequenza di Fibonacci, che costituisce il parametro state iniziale, sono (1, 1). Lo stato a ogni passaggio è costituito da due numeri la cui somma produce il numero di Fibonacci successivo.

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
        

Piattaforme

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

Informazioni sulla versione

F# Runtime

Supportato in: 2.0, 4.0

Silverlight

Supportato in: 3

Vedere anche

Riferimenti

Modulo Collections.Seq (F#)

Spazio dei nomi Microsoft.FSharp.Collections (F#)