我正在尝试使用 F# 懒惰地创建一个序列。
该序列定义如下:
序列的第 n 项
三角形数由下式给出: tn =
1/2n(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)))
非常感谢您能帮助我弄清楚展开是如何工作的。谢谢
Edit:我将第一个答案标记为正确,但它不起作用,但是我稍微修改了它并且它起作用了。
let tri_seq = 1.0 |> Seq.unfold (fun x -> Some (0.5 * x * (x + 1.0),x + 1.0))
首先,你为什么使用match
如果你只有一个案例?
let tri_seq = 1.0 |> Seq.unfold (fun x -> Some (x, 0.5 * x * (x + 1.0)))
其次,什么“似乎不起作用”?您是否知道您生成了一个无限列表?
/编辑:为了完整起见,这是正确的解决方案,OP自己找到并作为评论发布:
let tri_seq =
1.0 |> Seq.unfold (fun x -> Some (0.5 * x * (x + 1.0), x + 1.0))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)