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序列.但我必须先把它写出来.即便如此,它仍然只是一种直觉,而不是坚实的证据.
我有三个问题:
lef*_*out 11
我是否应该立即从原始线上发现Fibonacci序列?
不,不!你应该阅读这个例子,抓住你的头,手动写出来...... 从而得到一个直观的scanl
工作原理以及为什么这可以用于斐波那契数字.
你们当中有些人已经看到原来的线是Fibonacci序列吗?
好吧,它被称为fibs
...除此之外,是的,scanl
足够标准,经验丰富的程序员很快就能看到正在发生的事情.
非常确定Haskell需要更高的智商
我认为Haskell最需要的是顽固性和特殊的美学感.Haskell有一些奇特的方式来做不同的事情.其中一些有点难以理解,但最重要的是它们对大多数程序员来说并不熟悉.这都是关于习惯这些东西的.
而且,因为,如果我们诚实,Haskell技能现在仍然不是一个非常功利的东西(就像在任何现实世界的任务也可以通过其他语言解决),你真的需要一些热情的语言的美以及跟上它的未来潜力.
请注意,Haskell的怪癖和特征倾向于慢慢渗透到主流语言中.所以,即使"Haskell不适合你",你也可以长期受益于这里原型的好东西,也许甚至没有注意到它们来自哪里.