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 usa 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.
Negli assembly compilati questa funzione è denominata Unfold. Usare questo nome se si accede alla funzione da un linguaggio diverso da F# o tramite reflection.
Esempio
Il codice seguente illustra l'uso di Seq.unfold per generare due sequenze. La prima parte genera semplicemente una sequenza di numeri interi. La seconda genera una sequenza di numeri di Fibonacci, composti sommando i due numeri precedenti nella sequenza. I primi due numeri nella sequenza di Fibonacci, che rappresentano 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 8, Windows 7, Windows Server 2012, Windows Server 2008 R2
Informazioni sulla versione
Versioni della libreria di base F#
Supportata in: 2.0, 4.0, portabile