我试图通过使用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)
首先,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)