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 optionFunzione che utilizza lo stato corrente e restituisce una tupla di opzione dell'elemento successivo della sequenza e il successivo valore di stato.
state
Tipo: 'StateValore 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