我一直在问一些关于严格性的问题,但我想我以前错过了分数。希望这更精确。
假设我们有:
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。