相关疑难解决方法(0)

Haskell脚本耗尽空间

我正在使用项目Euler来自学Haskell,而且我在编写有关我的代码是如何被haskell执行时遇到了一些麻烦.第二个问题让我计算所有偶数斐波那契数的总和高达400万.我的脚本看起来像这样:

fibs :: [Integer]
fibs =  1 : 2 : [ a+b | (a,b) <- zip fibs (tail fibs)]

evens  :: Integer -> Integer -> Integer
evens x sum | (even x)   = x + sum
            | otherwise  = sum

main = do
  print (foldr evens 0 (take 4000000 fibs))
Run Code Online (Sandbox Code Playgroud)

Hugs给出错误"垃圾收集无法回收足够的空间",我认为这意味着列表条目不会因为它们被消耗而被释放foldr.

我需要做些什么来解决这个问题?我尝试编写一个使用累加器的尾递归(我认为)版本,但也无法使用它.

haskell space lazy-evaluation

2
推荐指数
2
解决办法
933
查看次数

标签 统计

haskell ×1

lazy-evaluation ×1

space ×1