foldl/foldr 不要打stackoverflow
foldl/foldr don't hit 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]
我的笔记本电脑挂了一会儿并对其进行了评估,而不是 return 预期的 Whosebug。
即使我尝试 foldr (+) 0 [1..1000000],我也无法获得 Whosebug,除非我增加列表的大小。
文章撰写后有什么变化吗?有什么想法吗?
我正在使用 :l folds.hs、运行 stack ghci 加载文件。我尝试了以下方法来减少我的堆栈大小,但可能是不正确的方法。
stack ghci +RTS -K2M -RTS
堆栈限制已默认增加到 80% of physical memory。要使用 stack
设置选项,请使用 stack ghci --ghci-options="+RTS -K2M"
。我确实在 GHC 8.8.4 上以这种方式得到了溢出。
我正在阅读这篇文章 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]
我的笔记本电脑挂了一会儿并对其进行了评估,而不是 return 预期的 Whosebug。
即使我尝试 foldr (+) 0 [1..1000000],我也无法获得 Whosebug,除非我增加列表的大小。
文章撰写后有什么变化吗?有什么想法吗?
我正在使用 :l folds.hs、运行 stack ghci 加载文件。我尝试了以下方法来减少我的堆栈大小,但可能是不正确的方法。
stack ghci +RTS -K2M -RTS
堆栈限制已默认增加到 80% of physical memory。要使用 stack
设置选项,请使用 stack ghci --ghci-options="+RTS -K2M"
。我确实在 GHC 8.8.4 上以这种方式得到了溢出。