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此函式,以取得目前的狀態,並傳回一個選項有序元組的下一個項目,順序的下一個狀態的值。
state
型別:'State初始狀態值。
傳回值
結果序列。
備註
指定的初始 state 引數會傳遞給項目產生器。 針對每個 IEnumerator資料流中的項目所套用到的項目] 產生器所產生的隨選一個 None值傳回的項目產生器。 每次呼叫項目產生器都會傳回新的剩餘 state。
將會重新計算資料流每次的 IEnumerator是要求,並逐一查看的順序。 傳回的序列可以在執行緒之間安全地傳送。 但是,個別 IEnumerator傳回序列所產生的值應該不存取並行
這個函式是名為 Unfold中 已編譯的組件。 如果從一個語言,F # 以外,或透過反映存取函式使用這個名稱。
範例
下列程式碼會示範在使用 Seq.unfold來產生 兩個序列。 第一個只會產生整數的序列。 第二個會產生一連串的費氏數字序列中加入兩個先前的數字所組成。 前兩個費氏順序的數字是 (1,1) 會形成初始 state參數。 在每個步驟的狀態是由兩個其總和會產生下一個費氏數字的數字所組成。
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 7、Windows Vista SP2、Windows XP SP3、Windows XP x64 SP2、Windows Server 2008 R2、Windows Server 2008 SP2、Windows Server 2003 SP2
版本資訊
F# 執行階段
支援版本:2.0、4.0
Silverlight
支援版本:3