Haskell中Fibonacci序列的构造

Haskell中Fibonacci序列的构造,haskell,recursion,fibonacci,Haskell,Recursion,Fibonacci,我是Haskell的完全初学者,刚刚遇到了以下构造斐波那契序列的简洁表达式: fibs = 0 : 1 : zipWith (+) fibs (tail fibs) 我想我了解每一个片段在做什么(:,zipWith,tail),我知道某种递归正在发生,但不太清楚如何发生。前两个值是0和1。此后,通过添加当前序列和上一个序列,将元素附加(压缩),并移动一个位置 例如,如果“当前”列表是(0、1、1、2、3、5),则尾部是(1、1、2、3、5)。加上这些给我们 fibs = (0, 1, 1, 2

我是Haskell的完全初学者,刚刚遇到了以下构造斐波那契序列的简洁表达式:

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

我想我了解每一个片段在做什么(
zipWith
tail
),我知道某种递归正在发生,但不太清楚如何发生。

前两个值是0和1。此后,通过添加当前序列和上一个序列,将元素附加(压缩),并移动一个位置

例如,如果“当前”列表是(0、1、1、2、3、5),则尾部是(1、1、2、3、5)。加上这些给我们

fibs = (0, 1, 1, 2, 3, 5)
tail = (1, 1, 2, 3, 5)
sum  = (1, 2, 3, 5, 8)
这给了我们一个表达

0: 1: (1, 2, 3, 5, 8)

。。。这将导致列表的单元素扩展。当我们无限制地重复这个问题时,我们得到了斐波那契序列。

我更感兴趣的是递归是如何工作的,但这在链接问题的答案中已经解释过了。