【发布时间】:2012-06-20 01:22:02
【问题描述】:
我一直在问一些关于严格性的问题,但我想我之前没记错。希望这更准确。
假设我们有:
n = 1000000
f z = foldl' (\(x1, x2) y -> (x1 + y, y - x2)) z [1..n]
不改变f,我应该设置什么
z = ...
这样f z 不会溢出堆栈吗? (即无论 n 的大小如何,都在恒定空间中运行)
如果答案需要 GHC 扩展也可以。
我的第一个想法是定义:
g (a1, a2) = (!a1, !a2)
然后
z = g (0, 0)
但我不认为 g 是有效的 Haskell。
【问题讨论】: