gpt4 book ai didi

haskell - 迭代函数不保存中间步骤?

转载 作者:行者123 更新时间:2023-12-04 09:42:26 25 4
gpt4 key购买 nike

我刚开始学习 Haskell,作为一个练习,我进入了一个 Project Euler 问题,其中斐波那契数列相加。我当前的方法是这个函数,它创建一个包含下一个元素的新列表:

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 函数的反馈——但我想让它工作,不管是否是次优方法)

最佳答案

只需使用 iterate !因为 Haskell 是一门纯语言,所有的子列表都被共享,你基本上不需要为生成所有这些迷你列表支付任何费用:[2, 1]实际上是 2, 1[3, 2, 1] ,等等。

你真的不想要 takeWhile ,因为这会给你带来很多额外的垃圾,你仍然需要使用 last 到达列表的末尾。 .相反,使用 find .

另请注意,如果您打算对结果列表进行求和,则会错过 1所以你会成为一个。

关于haskell - 迭代函数不保存中间步骤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5889244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com