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