学习函数式编程语言有多难?

时间:2009-11-15 21:20:42

标签: functional-programming

鉴于角色在从C到JAVA的不同命令式编程语言方面拥有丰富的经验。什么是函数式编程语言的学习曲线,比如Haskell?

5 个答案:

答案 0 :(得分:4)

在接受Haskell之前,您可能会发现更容易学习一些不是纯粹功能的东西,比如Lisp或ML。鉴于您的Java经验,Clojure,在JVM上运行的Lisp,可能是一个很好的起点。

答案 1 :(得分:4)

就像OP一样,我来自OOP /命令式背景,然后在2006年左右跳到函数式编程。

我有很多很多的C#和Java,并希望学习一门新语言。我从Python开始,在Perl上学习,并且在C ++上煞费苦心。这一切都很好,花花公子,但没有什么新东西需要学习,我基本上是用不同的语法一遍又一遍地重新学习同一种语言。偶然的,我偶然发现了Paul Graham的经典文章Beating the Averages,在那里他谈到了Lisp和函数式编程。

我认为学习其中一种“模糊”的函数式编程语言会很有趣。因此,在Erlang,Lisp,Haskell和OCaml之间,我没有特别的理由选择了OCaml,除了骆驼是邪恶的可爱(完全!)。有很多很多新东西要在这里挣扎:

  • Graaaaah,为什么我必须与编译器对抗以使类型推断正常工作?
  • Arrrragh,为什么这种语言没有任何像样的IDE?为什么emacs没有GUI编辑器?哪里是我的intellisense!
  • 柯里?这只是一个噱头,还是应该有用?
  • Waaaaah,我怎么能用代数数据类型做任何实用的事情?
  • [] -> ... | x::xs -> ...,WTF的意思是什么?

对我来说,从Java迁移到Python很容易:类似的建筑习语,类似的编程风格等。最难的部分是真正学习一个新的库,从n00b到专业版需要6周的时间。

从Java迁移到OCaml真的很难,因为没有任何东西可以构建,就像从第0步开始一样。在我停止对自己说话之前,花费了大约6个月的语言。 “现在我将如何在OCaml中执行此操作?

回想起来,如果我开始使用Haskell,我可能不会那么挣扎。可选的可变性+ OOP使OCaml表面上看起来像熟悉的领域,monad对我来说仍然是一个谜。

答案 2 :(得分:2)

我没有在函数式​​编程语言中开发任何实用的东西,但是在适应它时没有太多麻烦。

在开始之前,我建议递归地改进你的思维,因为这是你需要做的事情,无论是熟悉的还是不熟悉的语言。

此外,您需要适应函数是对象的想法,您可以将它们传递给函数,函数可以返回它们。

答案 3 :(得分:2)

取自link

C,Java或Python等过程或面向对象语言的用户应该注意,但是:您必须忘记大部分已经了解的编程知识。 Haskell与这些语言完全不同,需要不同的编程思维方式。最好用一个空白的平板进入本教程,尽量不要将Haskell与命令式语言进行比较,因为它们中的许多概念(类,函数,返回)在Haskell中具有明显不同的含义。

答案 4 :(得分:2)

Haskell的学习曲线略高于其他功能语言(如OCaml),尽管这是我个人的最爱。

关键,IMO,是考虑到构成,输入和输出(如果你来自OO,你可能认为几乎完全是继承 - 这可能会妨碍你的学习)。

尝试将纯净(无副作用)与不纯净(副作用 - 示例IO,状态等)分开。

请记住,职能是一等公民。

学习部分功能应用的技巧。一旦你习惯它,这是非常方便的。