ProjectEuler Q2:Haskell解决方案无法评估

时间:2017-12-31 00:27:09

标签: haskell

我邀请您查看来自project Euler的以下斐波纳契相关问题。该问题要求用户首先生成能够返回第n个斐波纳契数的斐波那契序列或函数。我使用zipWith解决方案生成一个懒惰/无限的斐波那契数列表:

fibs = 0 : 1 : zipWith (+) fibs (tail fibs)

接下来,问题要求将列表限制为小于4e6的斐波纳契数/值,然后对偶数求和。我想到这将是一个非常简单的列表理解:

sum [x | x<-fibs, even x && x < (4*10^6 + 1)]

这个表达式不会完成评估....我认为它会继续,直到它找到最右边的数字(第一个大于4e6的纤维,列表fibs!!34中的第34个元素),然后终止列表,总结少数整数。我做错了什么?

1 个答案:

答案 0 :(得分:6)

ghc不知道[x | x<-fibs, even x && x < (4*10^6 + 1)]何时终止,并且会尝试耗尽无限列表fibs。换句话说,它将试图在终止之前耗尽科特纳奇数的infinte列表。你应该研究takeWhile