我在这里看到很多关于函数式语言的讨论。为什么你要使用传统语言而不是传统语言呢?他们在哪些方面做得更好?他们更不擅长什么?理想的函数式编程应用程序是什么?


当前回答

哇,这是一个有趣的讨论。我对此有自己的看法:

FP使一些任务相对简单(与非FP语言相比)。 非FP语言已经开始从FP中汲取思想,所以我怀疑这种趋势会继续下去,我们将看到更多的合并,这将帮助人们更容易地过渡到FP。

其他回答

OOP要花多长时间才能被普通的公司程序员理解? 我在乌得勒支大学(Utrecht University)学习函数式编程,我想是在1994年,直到最近几年它才开始在“现实世界”流行起来。 没有所谓的“简单应用程序”。: -)

我认为,当我们开始在硬件中添加越来越多的核心时,软件某些关键部分的免费编程(接近)将是必不可少的。给函数式编程多一点时间。在当前和未来的c#版本中,函数式编程将会让那些公司程序员在没有意识到的情况下做好函数式编程的准备……

函数式编程将很可能成为工程师和科学家用来解决他们所面临的问题的工具。它不会像早期的语言那样占领世界。然而,最难打败的产品是Excel,如果我是一名工程师,需要做计算,Excel是很棒的。

However, F# is going to be another source and will likely fill design needs by the non-Computer Scientists. Let's face it, Computer Scientists have done a great job of creating a WHOLE new way of doing things. Object Oriented Programming is GREAT. But sometimes you just need a way to solve an equation, get a solution and graph it. That's it. Then a language like F# fills the bill. Or maybe you want to build a finite state machine, F# again could be one of the solutions, but then C could be a solution as well.

但是当涉及到并行处理时,Excel大放异彩,f#也会及时出现。但是要以友好的方式,F#= friendly。

函数式语言使用不同于命令式语言和面向对象语言的范式。他们使用无副作用函数作为语言的基本构建块。这使得很多事情成为可能,也让很多事情变得更加困难(或者在大多数情况下与人们习惯的不同)。

函数式编程的最大优点之一是无副作用函数的执行顺序并不重要。例如,在Erlang中,这用于以一种非常透明的方式启用并发。 因为函数式语言中的函数与数学函数的行为非常相似,所以很容易将它们翻译成函数式语言。在某些情况下,这可以使代码更具可读性。

传统上,函数式编程的一大缺点也是没有副作用。如果没有IO,很难编写有用的软件,但是如果函数中没有副作用,IO很难实现。因此,大多数人从函数式编程中得到的最多的就是从一个输入计算一个输出。在现代混合范式语言(如f#或Scala)中,这更容易。

许多现代语言都有函数式编程语言的元素。c# 3.0有很多函数式编程特性,你也可以在Python中进行函数式编程。我认为函数式编程流行的原因主要有两个原因:并发正在成为常规编程中的一个真正的问题,因为我们拥有越来越多的多处理器计算机;而且这些语言越来越容易使用。

函数式语言的一个关键特征是一类函数的概念。其思想是,您可以将函数作为参数传递给其他函数,并将它们作为值返回。

函数式编程包括编写不改变状态的代码。这样做的主要原因是,对函数的连续调用将产生相同的结果。您可以使用任何支持第一类函数的语言编写函数式代码,但有一些语言(如Haskell)不允许更改状态。事实上,你根本不应该产生任何副作用(比如打印文本)——这听起来可能完全没用。

相反,Haskell对IO: monads采用了不同的方法。这些对象包含解释器顶层要执行的所需IO操作。在其他任何层面上,它们都只是系统中的对象。

函数式编程有什么优点?函数式编程允许代码出现错误的可能性更小,因为每个组件都是完全隔离的。此外,使用递归和一级函数允许简单的正确性证明,这通常反映了代码的结构。

我不认为大多数现实的人会认为函数式编程会流行起来(成为像OO那样的主要范式)。毕竟,大多数业务问题都不是漂亮的数学问题,而是用来移动数据并以各种方式显示它们的繁琐的命令式规则,这意味着它不适合纯函数式编程范式(monad的学习曲线远远超过OO)。

对了,函数式编程让编程变得有趣。它会让你欣赏宇宙中潜在数学的简洁表达所蕴含的永恒之美。人们说学习函数式编程会让你成为更好的程序员。当然,这是非常主观的。我个人认为这也不完全正确。

它让你成为一个更有感情的人。