【发布时间】:2017-03-12 01:15:25
【问题描述】:
我正在创建一个斐波那契数列中小于或等于 4,000,000 的所有偶数的列表。在 Haskell 中,我将斐波那契数列定义为:
fibs = 1 : 2 : next fibs
where
next (a : t@(b:_)) = (a+b) : next t
并且我正在使用以下列表推导来构建我的集合:
[ x | x <- take 50 fibs, x `mod` 2 == 0, last x <= 4*10^6 ]
但是,GHC 抛出 Couldn't match expected type ‘[Integer]’ with actual type ‘Integer’ 错误。
我了解谓词last x <= 4*10^6 是造成错误的原因。受 hammar 的回答 here 的启发,我最初的反应是确保 4*10^6 是正确的类型,所以我尝试将谓词改写为 last x <= toInteger 4*10^6 无济于事;同样的错误。我还认为也许我需要将4*10^6 指定为单例(即[4*10^6]),但也没有运气。
我很难理解到底发生了什么以及如何最好地解决问题。
【问题讨论】:
标签: haskell