何时使用函数式编程语言?

Ale*_*sky 81 language-agnostic functional-programming

在哪种情况下,我应该选择使用函数式编程语言而不是更简洁的面向对象语言,如C++,C#或Java?

我理解什么是函数式编程,我真正理解的是什么类型的问题是一个完美的解决方案?

Ale*_*sky 88

我自己做了一些研究,并认为我可能会将CONCURRENCY添加到使用函数式语言的原因列表中.在不久的将来看到处理器速度在某些时候将无法使用相同的CPU技术增加.架构的物理特性不允许它.

这就是并发处理的用武之地.

不幸的是,由于数据之间的相互依赖性,大多数OOP语言不能同时利用多个处理器.

在纯函数式编程语言中,计算机可以同时运行两个(或更多)函数,因为这些函数不会改变外部状态信息.

这是一篇关于您可能喜欢的函数式编程的优秀文章.

  • 我不会说大多数OO语言都无法利用任意数量的处理器.我要说的是,一个程序以充分利用多处理器在同一时间以有效和可靠的方式,该程序必须在该代码的行为像纯函数计算最密集的单位组织等.可以用大多数语言组织一个程序.在函数式语言中比在命令式(包括面向对象)语言中更容易. (34认同)
  • 感谢您关联该文章.这真的有助于我解释事情. (2认同)

mar*_*ert 48

在我看来,功能语言主要适用于两件事:游戏AI和数学计算.它在游戏AI中很好,因为它有很好的列表操作(至少在Lisp和Scheme中),并且由于它的语法而用于数学计算.Scheme,Lisp和Haskell的语法使数学计算易于阅读.我要补充的最后一件事是功能语言真的很有趣.我的计划课程是我最开心的课程之一.

  • 还有,编译器!我听说过在Haskell编写编译器的人说他们"永远不会再用命令式语言编写编译器". (8认同)
  • 在我完成了我的大脑想要在编译器课程的第一周内爆炸的事实后,我参加了Scheme我也发现它很有趣(而且我在它身上得到了很多好处) (2认同)

joe*_*ely 13

我的一位朋友引用他的一位大学教授的话说如下:

在顶部绘制一个包含数据类型的网格,在左侧绘制对这些数据类型的操作.如果你垂直切割网格,你就是做OO; 如果你水平切片网格,你就是在做FP.

我的答案是FP是一种完全可行的编程方法,其应用范围与OO一样广泛.与任何编程语言选择讨论一样,我认为更重要的问题是:

  1. 您是否有时间投资学习新的符号和新的思维方式?
  2. 你正在考虑哪种语言有足够丰富的库,你不会重新发现一些轮子?

至于第一个问题,如果你这样做主要是为了学习价值,我建议看看Haskell,因为支持材料的范围很广(书籍,文章,活跃社区等)

至于第二个问题,Haskell有一个很好的库(尽管有些库比其他库更成熟),但Scala(在JVM上运行的混合OO函数语言)的优势在于你可以更加逐步地转换为函数式,您可以使用全系列的Java可访问库.


use*_*978 9

实际上你在PP中可以做的一切都可以在FP中完成,反之亦然.这只是另一种编码方式 - 对问题的另一种看法和解决问题的另一种方式.

但是,由于没有多少人使用FP,问题更多的是缺乏良好的库,可移植性/可维护性(因为维护者有更好的机会理解用C++编写的东西而不是Scheme),以及缺乏文档和社区.我知道有一些文档,但是,将它与C++,C#或Java进行比较,你会明白我的意思.

但是,如果你真的想做FP,你甚至可以在C++和C#中使用这种风格.当然,如果您使用标准库,它将不是100%FP.不幸的是,我不认为C#被优化用于函数式编程,它可能会产生很多性能问题.

这是一个主观的帖子,我对FP的看法.这不是一个严格的声明.

  • *"实际上你在PP中可以做的一切都可以在FP中完成"* - 实际上,它确切地说就是*所有东西. (7认同)
  • @BlueRaja-您是指图灵完整性吗?如果是这样,您说的话就不会遵循。例如,Conway的《人生游戏》是Turing Complete,但是您不能像在C中那样使用它编写视频卡驱动程序。同样,我看不到Haskell编写的任何最新游戏。可以在FP中完成!=理论上可以在理论FP中完成。 (2认同)