共用方式為


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

請參閱

參考

Collections.Seq 模組 (F#)

Microsoft.FSharp.Collections 命名空間 (F#)