我不清楚为什么这是斐波那契数列。我足够聪明,可以成为一名 Haskell 程序员吗?

I don't clearly see why this is the Fibonacci sequence. Am I intelligent enough to be a Haskell programmer?

这是在 Haskell 中获取斐波那契数列的一种方法。出自书haskellbook.com(据说适合初学者):

fibs = 1 : scanl (+) 1 fibs

我只能"see"这是在手动写出一些第一个元素后的斐波那契数列:

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 ...

直到现在我才对为什么这是斐波那契数列有了一些直觉。但是我必须先这样写出来。即便如此,它仍然只是一种直觉,而不是确凿的证据。

我有三个问题:

  1. 我是否应该立即从原始行中找出斐波那契数列?
  2. 你们中的某些专业 Haskell 程序员是否已经在这里工作了 5-10 年,如果您为了论证而从未见过这个特定的例子,立即看到原始行是斐波那契数列?
  3. 有时我发现自己在想自己是否足够聪明,可以成为一名 Haskell 程序员。也许这不适合我。 Haskell 有时让我觉得不够:( 从来没有使用其他编程语言有这种感觉。所以第三个问题:是否开发了任何 tests/methods 来确定特定程序员是否足够聪明,可以成为 Haskell 程序员?(我很确定 Haskell 需要比大多数其他语言更高的智商!)
  1. 与任何其他语言一样,代码的语义在某种程度上应该记录自身,所以答案是肯定的。但与此同时,习惯语法也需要时间——就像使用任何其他语言一样。别担心,你会得到它的。只是尽量不要回避这些问题并拥抱它们。逐步完成它们是一个很好的方法,继续这样做!
  2. 我既不是专业的 Haskell 程序员,也不是 10 年前学的,但在某种程度上是的。就像你不理解任何其他语言的斐波那契数列,当你看到它的时候半秒之内,我不得不考虑一下,但我会得到它很多 比我开始写作的时间快 Haskell.
  3. 与任何其他编程语言一样,Haskell 需要一定的思维方式才能轻松快速地阅读和理解。只记得你第一次看到任何其他语言的代码。很有可能,你也有同样的感觉,但记得不那么清楚了。由于 Haskell 是一种非常受数学启发的语言,因此许多非数学家经常对符号和编码风格感到困惑。 我的建议是不要放弃。你可能没有在大学学过 3 年的数学,所以只需要一点时间。 但是在这彩虹的尽头有一个巨大的金罐。根据我的经验,编写 Haskell 代码的人对函数式编程的理解程度无人能及!它肯定有助于用任何其他语言编写优雅的代码!

Was I supposed to immediately just spot the Fibonacci sequence from the original line?

见鬼不!您应该阅读示例,挠头,手动写出来...然后 从而 scanl 的工作原理以及为什么它可以用于 Fibonacci 有一个直觉数字。

Would some of you ... have seen that the original line is the Fibonacci sequence?

嗯,它 称为 fibs...除此之外,是的,scanl 是足够标准的,有经验的程序员很快就会明白什么是继续。

pretty sure Haskell requires a higher IQ

我认为 Haskell 最重要的是需要大量的 顽固 和特别的美感。 Haskell 有一些古怪的方式来做不同的事情。其中一些有点难以掌握,但大多数程序员只是不熟悉。一切都是为了习惯这些东西。

并且因为,老实说,Haskell 技能现在仍然不是非常实用的东西(例如,任何现实世界的任务也可以通过其他语言解决),您真的需要对这门语言的美丽和未来潜力充满热情才能跟上它的步伐。

请注意,Haskell 的怪癖和特性有慢慢渗入主流语言的趋势。因此,即使“Haskell 不适合你”,从长远来看,你也可能会从这里原型化的美好事物中受益,甚至可能不会注意到它们的来源。