问题描述
我正在阅读此https://wiki.haskell.org/Foldr_Foldl_Foldl%27,但是当我尝试复制代码时,例如
foldl k = go
where
go z [] = z
go z (x:xs) = let z' = k z x
in foldl k z' xs
sum2 = foldl (+) 0
try2 = sum2 [1..10000000]
我的笔记本电脑挂了一段时间,并对其进行了评估,而不是像预期的那样返回stackoverflow。
即使我尝试使用foldr(+)0 [1..1000000],除非增加列表的大小,否则我都不会获得stackoverflow。
自从撰写本文以来,有什么改变吗?有什么想法吗?
我正在使用:l folds.hs加载文件,并使用堆栈ghci运行。我尝试了以下方法来减小堆栈大小,但这也许是不正确的方法。
stack ghci +RTS -K2M -RTS
解决方法
默认情况下,堆栈限制已增加到80% of physical memory。要使用stack
设置选项,请使用stack ghci --ghci-options="+RTS -K2M"
。我确实在GHC 8.8.4上以这种方式得到了溢出。