【发布时间】:2014-05-19 19:34:53
【问题描述】:
我正在尝试使用序列在 F# 中模仿 Haskell 著名的无限斐波那契列表。为什么以下序列没有按预期进行评估?评价如何?
let rec fibs = lazy (Seq.append
(Seq.ofList [0;1])
((Seq.map2 (+) (fibs.Force())
(Seq.skip 1 (fibs.Force())))))
【问题讨论】:
-
应该注意的是,Haskell 惰性列表与 F# 序列不同(惰性列表在求值时保存在内存中,而在迭代它们时重新计算序列)。这使得 Haskell 模式变慢(如果你直接重写它)或丑陋(如果你添加缓存以提高性能)。
-
@TomasPetricek 澄清一下:你的意思是 Haskell 模式的 F# 实现是缓慢或丑陋的,不是吗? (另外,在@kvb 的解决方案中添加
Seq.cache对我来说似乎还不错?)
标签: f# functional-programming fibonacci lazy-sequences