Ale*_*sky 81 language-agnostic functional-programming
在哪种情况下,我应该选择使用函数式编程语言而不是更简洁的面向对象语言,如C++,C#或Java?
我理解什么是函数式编程,我真正理解的是什么类型的问题是一个完美的解决方案?
Ale*_*sky 88
我自己做了一些研究,并认为我可能会将CONCURRENCY添加到使用函数式语言的原因列表中.在不久的将来看到处理器速度在某些时候将无法使用相同的CPU技术增加.架构的物理特性不允许它.
这就是并发处理的用武之地.
不幸的是,由于数据之间的相互依赖性,大多数OOP语言不能同时利用多个处理器.
在纯函数式编程语言中,计算机可以同时运行两个(或更多)函数,因为这些函数不会改变外部状态信息.
mar*_*ert 48
在我看来,功能语言主要适用于两件事:游戏AI和数学计算.它在游戏AI中很好,因为它有很好的列表操作(至少在Lisp和Scheme中),并且由于它的语法而用于数学计算.Scheme,Lisp和Haskell的语法使数学计算易于阅读.我要补充的最后一件事是功能语言真的很有趣.我的计划课程是我最开心的课程之一.
joe*_*ely 13
我的一位朋友引用他的一位大学教授的话说如下:
在顶部绘制一个包含数据类型的网格,在左侧绘制对这些数据类型的操作.如果你垂直切割网格,你就是做OO; 如果你水平切片网格,你就是在做FP.
我的答案是FP是一种完全可行的编程方法,其应用范围与OO一样广泛.与任何编程语言选择讨论一样,我认为更重要的问题是:
至于第一个问题,如果你这样做主要是为了学习价值,我建议看看Haskell,因为支持材料的范围很广(书籍,文章,活跃社区等)
至于第二个问题,Haskell有一个很好的库(尽管有些库比其他库更成熟),但Scala(在JVM上运行的混合OO函数语言)的优势在于你可以更加逐步地转换为函数式,您可以使用全系列的Java可访问库.
实际上你在PP中可以做的一切都可以在FP中完成,反之亦然.这只是另一种编码方式 - 对问题的另一种看法和解决问题的另一种方式.
但是,由于没有多少人使用FP,问题更多的是缺乏良好的库,可移植性/可维护性(因为维护者有更好的机会理解用C++编写的东西而不是Scheme),以及缺乏文档和社区.我知道有一些文档,但是,将它与C++,C#或Java进行比较,你会明白我的意思.
但是,如果你真的想做FP,你甚至可以在C++和C#中使用这种风格.当然,如果您使用标准库,它将不是100%FP.不幸的是,我不认为C#被优化用于函数式编程,它可能会产生很多性能问题.
这是一个主观的帖子,我对FP的看法.这不是一个严格的声明.