foldl / foldr不要达到stackoverflow

问题描述

我正在阅读此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上以这种方式得到了溢出。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...