这是一种在Haskell中获取斐波纳契序列的方法。它来自于“haskellbook.com”一书(据说是为初学者编写的):
fibs = 1 : scanl (+) 1 fibs在手动写出第几个元素之后,我只能“看到”这是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 ...直到现在,我才有一些直觉来解释为什么这是斐波纳契序列。但我得像这样先把它写下来。即使如此,它仍然只是直觉,而不是确凿的证据。
我有三个问题:
发布于 2016-02-08 22:14:22
我是不是应该马上从原始线路上找出斐波纳契序列?
该死的不!你应该读这个例子,抓起你的头,用手写出来.从而直观地了解scanl是如何工作的,以及为什么它可以用于斐波那契数。
你们中的一些人..。看到原来的线路是斐波纳契序列了吗?
它叫fibs..。除此之外,是的,scanl是足够标准的,一个有经验的程序员很快就会看到正在发生的事情。
很确定Haskell需要更高的智商
我认为Haskell最需要的是一种很强的固执,以及一种特殊的美感。哈斯克尔有一些古怪的方法来做不同的事情。其中有些地方有点难以理解,但最重要的是,它们对大多数程序员来说都是陌生的。这一切都是为了适应这些东西。
而且,如果我们诚实的话,Haskell技能现在还不是一个非常实用的东西(就像在任何现实世界中的任务也可以被其他语言解决一样),你真的需要对语言的美丽和未来的潜力有一些热情才能跟上它。
请注意,Haskell的怪癖和特性有慢慢渗入主流语言的趋势。所以,即使“Haskell不适合你”,从长远来看,你也可以从这里原型的美好事物中获益,甚至可能根本没有注意到它们来自哪里。
发布于 2016-02-08 22:11:29
https://stackoverflow.com/questions/35279969
复制相似问题