Possible Duplicate:
Why functional languages?
我开始使用 C/C++、VB 和最终的 Python 进行编程 - 所有命令式语言。我参加了有关编程语言的类(class)并学习了我的第一门函数式语言 - OCaml。太可怕了。
抛开语法和其他恐怖因素不谈,OCaml 把我的命令式思维过程抛到了九霄云外。这令人沮丧。我坚持认为所有可以功能性完成的事情也可以命令式完成。我认为函数式编程是没有肢体(副作用)的命令式编程。为了回应我的挫败感,我的教授能想到的唯一好处是 FPL 能够并行化无副作用的函数。
不管怎样,说够了。
- FPL 比 IPL 有哪些优势?
- 有什么可以在 FPL 中轻松完成而在 IPL 中无法轻松完成的事情吗?
- 是否有任何使用 FPL 的真实示例,或者它们主要用作学术练习? (当我说现实世界时,我指的是一个严重依赖语言的功能方面并且不会将 FPL 塞入它不属于的场景的项目)。
谢谢,
告诫
首先,今天几乎所有常用的语言在表达能力上都是等价的,无论是命令式还是函数式,所以很自然地认为你可以用函数式语言做的任何事情你也可以用命令式语言做,因为这可能是真的。
函数式语言的真正优点之一是它们的结构允许应用 Hindley-Milner 类型推断。这是 SML、OCaml 和许多其他函数式语言中使用的类型系统。它似乎确实可以降低错误率,并且能够通过预先发现错误作为编译错误来为您节省大量时间和精力。
自动并行化的论点有点被过度使用了,特别是因为 promise 根本没有实现。我已经用函数式语言编写了明确的并行代码,恕我直言,这比用 Java 或类似语言做类似的事情要好。
至少在轶事上,我不是第一个声称学习函数式语言可以让你成为更好的命令式程序员的人!当您使用 OCaml 时,您的“命令式”思维过程被打断时会感到不适,这实际上是一个非常好的过程。它会让您质疑假设并阻止您以特定方式编写代码,因为您一直都是这样做的。
至于实际使用,您可能想看看 Commercial Users of Functional Programming 的 session 记录讲习类。还有一些用各种函数式语言编写的非常大的项目,尽管其中大多数在相当小的社区之外可能兴趣有限。定理证明器 Coq 和 Isabelle 分别用 Ocaml 和 SML 编写。
无论你做什么,我都会坚持。在事情最终点击之前,我花了很长时间与 ML 碰撞。这些天我不确定自己是否还记得 Java 或 C 是如何工作的,因为我已经很长时间不需要它们了……我只是使用 ML!