我正在尝试使用 Haskell 来计算统计物理学中模型的配分函数。这涉及遍历相当大的配置列表并对各种可观察值求和——我希望尽可能高效地做到这一点。
我的代码的当前版本在这里:https ://gist.github.com/2420539
尝试在列表和向量之间进行选择以枚举配置时会发生一些奇怪的事情;特别是,要截断列表,使用V.toList . V.take (3^n) . V.fromList
(where V
is Data.Vector
) 比仅使用更快take
,这感觉有点违反直觉。在这两种情况下,列表都是惰性评估的。
列表本身是使用iterate
;构建的 相反,如果我Vector
尽可能多地使用 s 并通过 using 构建列表V.iterateN
,那么它再次变得更慢......
我的问题是,有没有办法(除了拼接V.toList
和V.fromList
代码中的随机位置)来预测哪个最快?(顺便说一句,我使用ghc -O2
当前稳定版本编译所有内容。)