haskell中的斐波纳契序列值

时间:2011-05-10 20:34:17

标签: list haskell lazy-evaluation

如何使用该代码获得斐波那契序列的总和:

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

编辑:取5个fibs给出[0,1,1,2,3]列表,所以第5个元素的值是3,要提取它我们要输入:'last(take(5 fibs))'我们得到3.等等

如果我们使用解释器来寻找第5个元素我们得到[0,1,2,3]的列表,最后一个元素与第5个元素的值相同,如何得到该列表的LAST元素? 我可以使用last制作它吗?你有任何想法吗,可以吗?

3 个答案:

答案 0 :(得分:5)

该定义产生无限整数流。没有最后一个元素。

如果您想要从列表中索引特定元素,则可以使用(!!)运算符进行索引:

> [1..] !! 7
8

答案 1 :(得分:4)

我并不完全清楚你在问什么,但是如果你有一个非空的非无限(例如,不是fibs,但是,例如,某些take n fibs n }})list,您确实可以通过将last应用于它来获取其最后一个元素。或者,如果你只想要列表的第n个元素(从零开始并假设列表至少有n + 1个元素),你可以listName !! n来提取它。

答案 2 :(得分:1)

好吧,如果你只想要列表中的第10个元素:

last (take 10 fibs)

如果你想要前10个元素的总和:

sum (take 10 fibs)

顺便说一下,使用递归时,对于fibs有一个稍微简单的表达式:

fibs = (fibgen 0 1) where fibgen a b = a : fibgen b (a+b)