Seq.unfold<'State,'T> 函式 (F#)
傳回序列,這個序列包含指定的計算所產生的項目。
**命名空間/模組路徑:**Microsoft.FSharp.Collections.Seq
組件:FSharp.Core (在 FSharp.Core.dll 中)
// Signature:
Seq.unfold : ('State -> 'T * 'State option) -> 'State -> seq<'T>
// Usage:
Seq.unfold generator state
參數
generator
型別:'State -> 'T * 'State option函式,接受目前狀態再傳回包含下一個序列項目和下一個狀態值的選項 Tuple。
state
型別:'State初始狀態值。
傳回值
結果序列。
備註
指定的初始 state 引數會傳遞給項目產生器。 對於每個 IEnumerator,都會藉由視需要套用項目產生器來產生資料流中的項目,直到項目產生器傳回 None 值為止。 每次呼叫項目產生器都會傳回新的剩餘 state。
每次 IEnumerator 受到要求並逐一查看序列時,就會重新計算資料流。 傳回的序列可以在執行緒之間安全地傳送。 但是,您不應該並行存取傳回之序列產生的個別 IEnumerator 值。
這個函式在已編譯的組件中名為 Unfold。 如果您是透過 F# 以外的語言,或是透過反映來存取函式,請使用這個名稱。
範例
下列程式碼示範如何使用Seq.unfold產生兩個序列。 第一個只是產生整數序列。 第二個會產生 Fibonacci 數字序列,這些數字是由序列中的前兩個數字相加形成的。 Fibonacci 序列中的前兩個數字為 (1, 1),這構成初始的 state 參數。 每個步驟的狀態由總和產生下一個 Fibonacci 數的兩個數字組成。
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
平台
Windows 8 中, Windows 7, Windows Server 2012 上, Windows Server 2008 R2
版本資訊
F# 核心程式庫版本
支援版本:2.0, 4.0,可攜式執行檔 (PE)。