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