Programming languages 为什么是函数式语言?

Programming languages 为什么是函数式语言?,programming-languages,functional-programming,Programming Languages,Functional Programming,我在这里看到很多关于函数式语言的讨论。你为什么要用一种语言而不是“传统”语言?他们做得更好的是什么?他们更擅长什么?什么是理想的函数式编程应用程序?函数式语言的一个关键特性是一流函数的概念。其思想是,您可以将函数作为参数传递给其他函数,并将其作为值返回 函数式编程涉及编写不改变状态的代码。这样做的主要原因是,对函数的连续调用将产生相同的结果。您可以用任何支持一流函数的语言编写函数代码,但有些语言,如Haskell,不允许您更改状态。事实上,你根本不应该产生任何副作用(比如打印文本),这听起来好像

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

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

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

Haskell采用了一种不同的IO方法:单子。这些对象包含要由解释器顶层执行的所需IO操作。在任何其他级别,它们都只是系统中的对象


函数式编程提供了什么优势?函数式编程允许使用更少的潜在错误进行编码,因为每个组件都是完全隔离的。此外,使用递归和一级函数可以简单地证明正确性,这通常反映了代码的结构。

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

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

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


许多现代语言都有函数式编程语言的元素。C#3.0有很多函数式编程特性,你也可以用Python进行函数式编程。我认为函数式编程之所以流行,主要是因为两个原因:并发在普通编程中成为一个真正的问题,因为我们越来越多地使用多处理器计算机;语言变得越来越容易理解。

除了其他答案之外,用纯函数的术语来表达解决方案会迫使人们更好地理解问题。相反,以功能性的方式思考会培养出更好的解决问题的能力


*要么是因为功能范式更好,要么是因为它能提供额外的攻角。

结帐

我必须很密集,但我仍然不明白。有没有用F#这样的函数式语言编写的小型应用程序的实际例子,你可以看看源代码,看看为什么使用这种方法比C#更好?

对我来说,主要的优点是它固有的并行性,特别是当我们现在正从更多的MHz转向越来越多的内核时


我不认为它会成为下一个编程范式并完全取代OO类型的方法,但我确实认为我们会达到这样的程度:要么我们需要用函数式语言编写一些代码,要么我们的通用语言将增长到包含更多函数结构。

我同意第一点,但时代变了。即使是后来采用的公司,如果他们看到有优势,也会做出反应。生活是动态的

90年代末,他们在斯坦福大学教授Haskell和ML。我确信像卡内基梅隆大学、麻省理工学院、斯坦福大学和其他一些好学校都在向学生展示这一点

我同意大多数“在web上公开关系数据库”应用程序将在很长一段时间内继续这样做。javaee、.NET、RoR和PHP已经发展出一些很好的解决方案来解决这个问题

您偶然发现了一件重要的事情:这可能是一个无法通过其他方式轻松解决的问题,这将促进函数式编程。那会是什么

大规模多核硬件和云计算会推动它们前进吗

大多数应用程序都非常简单,可以用普通的面向对象方法来解决

  • OO方式并不总是“正常的”。这十年的标准是过去十年被边缘化的概念

  • 函数式编程就是数学。(将函数编程替换为Lisp):

  • 那么为什么会这样呢 20世纪50年代的语言不是过时的,是吗 不是技术而是数学,还有 数学不会过时。右翼 将Lisp与之进行比较的不是20世纪50年代 硬件,但是,比如说,快速排序 在中发现的算法 1960年,仍然是最快的 通用排序


    即使您从未专业地使用函数式语言,理解函数式编程也会使您成为一名更好的开发人员。它将为您的代码和编程提供一个新的视角

    我说没有理由不学


    我认为在混合函数式和命令式风格方面做得很好的语言最有趣,也最有可能成功

    大多数应用程序都可以解决
    * The average corporate programmer, e.g. most of the people I work with, will not understand it and most work environments will not let you program in it
    * It's not really taught at universities (or is it nowadays?)
    * Most applications are simple enough to be solved in normal IMPERATIVE ways