使用Haskell中的列表推导定义无限的Fibonacci数序列

eye*_*erg 1 haskell functional-programming list-comprehension fibonacci

我该怎么做?这是我演讲幻灯片中练习的一部分,提示是使用库函数tail :: [a] -> [a]zip :: [a] -> [b] -> [(a,b)].此外,功能的类型是fibs :: [Integer]

我知道列表理解是如何工作的,如何编写一个递归的Fibonacci函数,它接受一个值并且熟悉tail和zip函数 - 但是,我只是无法弄清楚这一个并且无法找到一个在线示例.任何人都可以告诉我它是如何完成的吗?

出于好奇,Haskell中使用的函数如何(产生无限列表)?如果我fibs在ghci命令提示符下写(函数名),例如它是否会继续打印列表中的元素,直到时间结束?

在此先感谢您的帮助.

chi*_*chi 8

这是一个提示.

采取两个权力的序列.

p2 = [1, 2, 4, 8, 16 ...
Run Code Online (Sandbox Code Playgroud)

zip 它本身

zip p2 p2 = [(1,1), (2,2), (4,4), ...]
Run Code Online (Sandbox Code Playgroud)

对列表中的每一对求和(这可以使用列表推导来完成)

[2, 4, 8, ...
Run Code Online (Sandbox Code Playgroud)

前置1:

[1, 2, 4, 8, ...
Run Code Online (Sandbox Code Playgroud)

所以我们p2再次获得了这份名单.如果你在Haskell中表达了所有这些,你最终得到了一些表单代码

p2 = 1 : ... something involving p2 ...
Run Code Online (Sandbox Code Playgroud)

这是一个产生两个权力的工作程序.

一旦你开始工作,你可以稍微改变它并获得斐波纳契.

最后一点:是的,打印p2将打印整个无限序列.您可以使用打印几个元素

take 10 p2
Run Code Online (Sandbox Code Playgroud)