函数式语言

---恢复内容开始---

函数式语言

         函数式编程并不是新概念,实际上,在计算机科学出现之初,函数式编程就已经崭露头角,教科书式的函数式编程语言Lisp在1958年就诞生了,但是,为什么一直都是命令式编程和面向对象编程大行其道呢?

阿兰·图灵和冯·诺依曼祖师爷开天辟地,创立了计算机这门学科,因为这行前无古人,所以最早的一批学者都有其他专业的背景,有的是电子电气方面的专家,有来自物理学科,还有的本来是数学家。不同的背景,也就带来了对计算机发展方向的不同观点。

因此,对于编程语言有着不同方向的发展,涌现出了最初的函数式编程,命令式编程和面向对象的编程等。函数式编程可以理解为如下:

函数式编程:将业务逻辑细化,抽象,封装成一个个功能函数,并借助语言自带的高阶函数api,将整个业务流程转化为函数之间的相互调用,这就是函数式编程。

比起指令式编程,函数式编程更加强调程序执行的结果而非执行的过程,倡导利用若干简单的执行单元让计算结果不断渐进,逐层推导复杂的运算,而不是设计一个复杂的执行过程。

函数式编程语言(functional language)

      命令式编程语言是以冯诺依曼这种体系结构为模型,而函数式程序语言的目的是尽可能的模拟数学函数。

      函数式语言的核心特征:

      (1)以“函数”为首,如同命令式语言中的“变量”,函数可以赋值给其他变量,可以作为其他函数的参数,

        或者作为其他函数的返回值。

      (2)不修改变量的值

      (3)只有表达式,没有语句。此处的语句指的是没有返回值得某些操作。

      (4)引用透明(Referential transparency),函数的运行不依赖与外部变量或“状态”,简单的说就是,

        同一个输入(参数),总是会产生同一个输出(返回值),这与数学函数的特征很一致。

        命令式语言因为全局变量等的存在,就无法做到这一点。

      (5)对比命令式语言,递归形式的循环

 
最近流行的函数式编程语言有:Haskell、OCaml等。
 
为什么函数式语言在近来开始流行:

         函数式编程语言 Haskell 和 OCaml 几乎成为新想法的摇篮,它们当中有一些已经成为主流编程语言的一部分。垃圾回收和参数化多态就是其中最好的例子。Java 的泛型是在 2000 年初引入的,但它在函数式编程语言中早已存在了 20 年。Linq 的设计思想直接来自 Haskell,F# 的 workflow 设计灵感则来自 Haskell 的 monadic I/O story。

随着摩尔定律的放缓,计算机用户开始更多地依赖软件能够并行地运行于多个核芯片之上,以此来获得更快的处理速度。毫无疑问,函数式编程语言特别适合用于并行执行,因为它们很少有机会发生崩溃。

“在使用函数式编程语言时,可以通过避免运算单元之间发生交互来实现并行运算。这就要求程序员对程序各个部分之间的交互细节了如指掌,从而降低 bug 出现的几率”。

函数式编程语言的市场仍然相对较小,但毕竟已经存在了 27 年,它们的用户群还是很强大的。很多公司也开始使用函数式编程语言。

 

 

 
 

---恢复内容结束---

原文地址:https://www.cnblogs.com/cd123/p/10441416.html