共用方式為


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)。

請參閱

參考

Collections.Seq 模組 (F#)

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