我是Haskell的完全初学者,刚刚遇到以下简洁表达式来构造Fibonacci序列:
fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
我想我理解每件作品的作用(:
,zipWith
,tail
),我知道某种递归正在发生,但我不太确定如何。
答案 0 :(得分:1)
前两个值为0和1.此后,通过添加当前和前一个系列,移动一个位置来附加(压缩)元素。
例如,如果"当前" list是(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)
...这导致列表的单元素扩展。当我们无限制地重复这个时,我们得到Fibonacci序列。