我开始用C / C ++,VB和最终的Python编程 - 所有命令式语言。我参加了一门关于编程语言的课程并学习了我的第一个函数式语言 - OCaml。太可怕了。
除了语法和其他恐怖之外,OCaml采取了我的命令性思维过程并将其抛到了窗外。这令人沮丧。我坚持认为,所有可以在功能上完成的事情也可以强制执行。我认为函数式编程是命令式编程而没有肢体(副作用)。为了回应我的沮丧,我的教授可以提出的唯一好处是FPL能够并行化无副作用的功能。
无论如何,说得够多。
谢谢,
Advait
答案 0 :(得分:14)
首先,几乎所有现在常用的语言都具有相似的表现力,无论是命令式的还是功能性的,所以很自然地认为你可以用函数式语言做的任何事情都可以在命令式语言中完成,因为这可能是真的。
关于函数式语言的一个非常好的事情是它们的结构允许应用Hindley-Milner类型的推理。这是SML,OCaml和一堆其他函数语言中使用的类型系统。它真的似乎可以降低错误率,并且能够通过预先发现错误作为编译错误来节省大量的时间和精力。
自动并行化参数有点过度使用,特别是因为承诺根本没有最终结果。我已经在函数式语言中明确地编写了并行代码,它比使用Java等类似的东西更好,恕我直言。
至少有趣的是,我不会是第一个声称学习函数式语言使你成为更好的命令式程序员的人!在使用OCaml时,让您的“命令式”思维过程中断时感到的不适实际上是一个非常好的过程。它会让你质疑假设并阻止你以特定的方式编写代码,因为你总是这样做。
至于实际使用,您可能希望查看Commercial Users of Functional Programming研讨会的会议记录。还有一些非常大的项目用各种函数式语言编写,尽管大多数项目在相对较小的社区之外可能有限。定理证明Coq和Isabelle分别用Ocaml和SML编写。
无论你做什么,我都会坚持下去。在事情最终被点击之前,我花了很长时间对ML进行敲击。这些天我不确定我是否记得Java或C是如何工作的,因为我很久没有需要它了......我只是使用ML!
答案 1 :(得分:7)
当一个人终于设法让他的训练有素(错误)训练的头脑沉默时,FP实际上变得比IP更容易,更有趣。
由于其声明性,FP往往更安全,更容易出错。
我喜欢认为并行化命令式代码会使其复杂性增加一倍(尝试使用非平凡的并行应用程序)。由于在许多情况下缺乏同步,IMO,FP大大缩小了差距。
引用Gian,学习FP让你成为更聪明势在必行的程序员...
答案 2 :(得分:3)