F#中的Seq.unfold解释

mas*_*nix 4 f# seq.unfold

我试图通过使用F#来懒惰地创建一个序列.

序列定义如下:

三角数序列的第n项由tn =½n(n + 1)给出; 所以前十个三角形数字是:

1,3,6,10,15,21,28,36,45,55 ......

这是我到目前为止,但似乎没有工作:

let tri_seq = 1.0 |> Seq.unfold (fun x -> match x with                                         
                                          | _ -> Some (x, 0.5*x*(x + 1.0)))
Run Code Online (Sandbox Code Playgroud)

非常感谢谁能帮我弄清楚展开的效果.谢谢

编辑:我将第一个答案标记为正确,但它有效,但我稍微修改了它并且它有效.

let tri_seq = 1.0 |> Seq.unfold (fun x -> Some (0.5 * x * (x + 1.0),x + 1.0))
Run Code Online (Sandbox Code Playgroud)

Kon*_*lph 8

首先,match如果你只有一个案例,为什么要使用?

let tri_seq = 1.0 |> Seq.unfold (fun x -> Some (x, 0.5 * x * (x + 1.0)))
Run Code Online (Sandbox Code Playgroud)

第二,什么"似乎不起作用"?你知道你产生了无限的名单吗?

/编辑:为了完整起见,这是正确的解决方案,OP发现自己并发布评论:

let tri_seq = 
    1.0 |> Seq.unfold (fun x -> Some (0.5 * x * (x + 1.0), x + 1.0))
Run Code Online (Sandbox Code Playgroud)