今天我在Haskell写一个小程序。我发现在ghci的交互模式中,这个:
take 100 $ foldl (\s a -> s ++ [last s + a]) [0] (1:[6,12..])
由于内存不足,会挂起ghci并使其崩溃,但是:
take 100 $ foldl (\s a -> s ++ [last s + a]) [0] (1:[6,12..606])
可以运行得很好。
为什么Haskell的懒惰评估不能让第一个在内存中运行(3G,BTW)?或者也许是ghci的怪癖?
感谢您的任何意见!
答案 0 :(得分:7)
我认为你的问题是:
foldl
在infinte列表中存在一些问题(请参阅HaskelWiki: Fold)
但如果您尝试使用foldr
last s
则会出现问题。
不知道这是否是作业,但我认为你想自己找到解决方案,所以这里有一个提示:而不是折叠看待展开 - 这里是example with the fibonaccis