我刚开始学习 Haskell,并作为练习进入了一个欧拉计划问题,其中斐波那契数相加。我当前的方法是这个函数,它创建一个包含下一个元素的新列表:
fib :: (Integral a) => [a] -> [a]
fib xs@(x1:x2:_) = (x1+x2) : xs
我找到了iterate
在结果上重新应用函数的函数。但是,结果是一个列表列表,[[2,1],[3,2,1],[5,3,2,1],..]
. iterate
当我对中间结果不感兴趣时,有什么替代方法?我想对takeWhile
最后生成的数字做一个条件。这是完全错误的思考方式吗?
(我已经看到了生成斐波那契数列的更好/更短/更好的方法,所以我并不是真的在寻找有关该fib
函数的反馈 - 但我想让它工作,无论是否是次优方法)