我不清楚为什么这是Fibonacci序列.我是否足够聪明才能成为Haskell程序员?

has*_*lHQ 3 recursion haskell fibonacci

这是在Haskell中获取Fibonacci序列的一种方法.这是来自书haskellbook.com(据说是初学者):

fibs = 1 : scanl (+) 1 fibs
Run Code Online (Sandbox Code Playgroud)

在手动写出一些第一个元素之后,我只能"看到"这是Fibonacci:

1 : scanl (+) 1 (1 : scanl (+) 1 (1 : scanl (+) 1 (1 : 1 ...
1 : scanl (+) 1 (1 : scanl (+) 1 (1 : 1 : 2 : 3 ...
1 : scanl (+) 1 (1 : 1 : 2 : 3 : 5 : 8 ...
1 : 1 : 2 : 3 : 5 : 8 : 13 : 21 ...
Run Code Online (Sandbox Code Playgroud)

只有现在我才能直截了当地说明为什么这是Fibonacci序列.但我必须先把它写出来.即便如此,它仍然只是一种直觉,而不是坚实的证据.

我有三个问题:

  1. 我是否应该立即从原始线上发现Fibonacci序列?
  2. 你们有些专业的Haskell程序员在这里工作了5到10年,如果你为了论证而从未见过这个特殊的例子,那么立即看到原来的线是Fibonacci序列吗?
  3. 我有时会发现自己想知道自己是否足够聪明才能成为Haskell程序员.也许这不适合我.Haskell有时让我感到不适应:(从来没有对其他编程语言有这种感觉.所以第三个问题:是否已经开发出任何测试/方法来确定一个特定的程序员是否足够智能成为Haskell程序员?(我很确定Haskell需要比大多数其他语言更高的智商!)

lef*_*out 11

我是否应该立即从原始线上发现Fibonacci序列?

不,不!你应该阅读这个例子,抓住你的头,手动写出来...... 从而得到一个直观的scanl工作原理以及为什么这可以用于斐波那契数字.

你们当中有些人已经看到原来的线是Fibonacci序列吗?

好吧,它称为fibs...除此之外,是的,scanl足够标准,经验丰富的程序员很快就能看到正在发生的事情.

非常确定Haskell需要更高的智商

我认为Haskell最需要的是顽固性和特殊的美学感.Haskell有一些奇特的方式来做不同的事情.其中一些有点难以理解,但最重要的是它们对大多数程序员来说并不熟悉.这都是关于习惯这些东西的.

而且,因为,如果我们诚实,Haskell技能现在仍然不是一个非常功利的东西(就像在任何现实世界的任务也可以通过其他语言解决),你真的需要一些热情的语言的美以及跟上它的未来潜力.

请注意,Haskell的怪癖和特征倾向于慢慢渗透到主流语言中.所以,即使"Haskell不适合你",你也可以长期受益于这里原型的好东西,也许甚至没有注意到它们来自哪里.