(2) 阅读 (2382)

函数式编程 编辑

词条创建者 匿名用户

函数式编程

编辑

计算机科学中,函数式编程是一种通过应用和组合函数来构建程序的编程范式。它是一种声明式编程范式,其中函数定义是将值映射到其他值的表达式树,而不是更新程序运行状态的一系列命令式语句。

在函数式编程中,函数被视为一等公民,这意味着它们可以绑定到名称(包括本地标识符),作为参数传递,并从其他函数返回,就像任何其他数据类型一样。这允许以声明性和可组合的风格编写程序,其中小功能以模块化方式组合。

函数式编程有时被视为纯函数式编程的同义词,是将所有函数视为确定性数学函数或纯函数的函数式编程的一个子集。当使用一些给定参数调用纯函数时,它将始终返回相同的结果,并且不受任何可变状态或其他副作用的影响。这与不纯过程形成对比,在命令式编程中很常见。,这可能会产生副作用(例如修改程序的状态或从用户那里获取输入)。纯函数式编程的支持者声称,通过限制副作用,程序可以有更少的错误,更容易调试和测试,更适合形式验证。

函数式编程起源于学术界,从lambda演算演变而来,这是一种仅基于函数的正式计算系统。函数式编程在历史上一直比命令式编程不太受欢迎,但许多功能性语言都看到当今使用在工业和教育,包括CommonLisp的,计划,的Clojure,Wolfram语言,Racket,Erlang,Elixir,OCaml,Haskell、和F#。函数式编程也是一些在特定领域取得成功的语言的关键,例如Web中的JavaScript,统计中的R,财务分析中的J、K和Q,和用于XML的XQuery/XSLT。特定领域的声明性语言,如SQL和Lex/Yacc使用函数式编程的一些元素,例如不允许可变值。此外,许多其他编程语言支持函数式编程或实现了函数式编程的特性,例如C++11、Kotlin、Perl、PHP、Python、]Go、Rust、Raku、Scala、和Java(自Java8)。

函数式编程的历史

编辑

该演算,在1930年开发邱奇,是一个正式的系统的计算,从内置的功能应用。1937年AlanTuring证明了lambda演算和图灵机是等效的计算模型,表明lambda演算是图灵完备的。Lambda演算构成了所有函数式编程语言的基础。1920年代和1930年代,MosesSchönfinkel和HaskellCurry开发了一个等效的理论公式,即组合逻辑

Church后来开发了一个较弱的系统,即简单类型的lambda演算,它通过为所有项分配一个类型来扩展lambda演算。这构成了静态类型函数式编程的基础。

xxx种函数式编程语言LISP是1950年代后期JohnMcCarthy在麻省理工学院(MIT)期间为IBM700/7000系列科学计算机开发的。LISP函数是使用Church的lambda符号定义的,并使用标签结构进行扩展以允许递归函数。Lisp首先介绍了函数式编程的许多范式特征,尽管早期的Lisps是多范式语言,并且随着新范式的发展纳入了对众多编程风格的支持。后来的方言,如Scheme和Clojure,以及Dylan和Julia等分支,试图围绕一个干净的功能核心简化和合理化Lisp,而CommonLisp旨在保留和更新它所取代的众多旧方言的典型特征。

1956年的信息处理语言(IPL)有时被认为是xxx种基于计算机的函数式编程语言。它是一种用于操作符号列表的汇编语言。它确实有一个generator的概念,它相当于一个接受函数作为参数的函数,并且由于它是一种汇编级语言,代码可以是数据,因此IPL可以被视为具有更高阶的函数。但是,它在很大程度上依赖于变异列表结构和类似的命令式功能。

KennethE.Iverson在1960年代初期开发了APL,在他1962年的著作AProgrammingLanguage(ISBN9780471430148)中有所描述。APL对JohnBackus的FP产生了主要影响。1990年代初,艾弗森和许志强创立了J.在1990年代中期,曾与艾弗森合作过的亚瑟·惠特尼(ArthurWhitney)创建了K,该K与其后代Q一起用于金融行业的商业用途。

JohnBackus在他1977年的图灵奖演讲“编程可以从冯诺依曼风格中解放出来吗?函数式风格及其程序代数”中介绍了FP。他将功能程序定义为通过允许“程序代数”的“组合形式”以分层方式构建;在现代语言中,这意味着函数式程序遵循组合性原则。Backus的论文普及了对函数式编程的研究,尽管它强调了函数级编程,而不是现在与函数式编程相关的lambda演算风格。

1973年语言ML被创造罗宾·米尔纳在爱丁堡大学和大卫·特纳开发的语言SASL在圣安德鲁斯大学。同样在1970年代的爱丁堡,Burstall和Darlington开发了函数式语言NPL。NPL基于Kleene递归方程,并首次在他们的程序转换工作中引入。Burstall、MacQueen和Sannella然后结合了来自ML的多态类型检查来产生语言Hope。ML最终发展成几种方言,其中最常见的是OCaml和StandardML。

在1970年代,GuyL.Steele和GeraldJaySussman开发了Scheme,如Lambda论文和1985年教科书StructureandInterpretationofComputerPrograms中所述。Scheme是xxx个使用词法范围并需要尾调用优化的lisp方言,这些特性鼓励函数式编程。

在1980年代,PerMartin-Löf开发了直觉类型理论(也称为构造类型理论),它将函数式程序与表示为依赖类型的构造证明相关联。这导致了交互式定理证明的新方法,并影响了后续函数式编程语言的发展。

由DavidTurner开发的懒惰函数式语言Miranda最初出现于1985年,对Haskell产生了强烈影响。由于Miranda是专有的,Haskell于1987年开始达成共识,以形成函数式编程研究的开放标准;自1990年以来,实施版本一直在进行中。

最近,它在诸如基于CSG几何框架的OpenSCAD语言提供的参数化CAD之类的利基中得到了使用,尽管它对重新分配值的限制(所有值都被视为常量)导致不熟悉函数式编程的用户感到困惑作为一个概念。

函数式编程继续在商业环境中使用。

函数式编程的应用

编辑

电子表格

电子表格可以被认为是一种纯粹的、零阶的、严格评估的函数式编程系统。然而,电子表格通常缺乏高阶函数以及代码重用,并且在某些实现中,也缺乏递归。已经为电子表格程序开发了几个扩展,以实现更高阶和可重用的功能,但到目前为止仍主要是学术性质的。

函数式编程

学术界

函数式编程是编程语言理论领域的一个活跃研究领域。有几个同行评审的出版物场馆注重功能编程,包括国际会议上的函数式编程时,[功能编程,并在函数式编程研讨会趋势

工业

函数式编程已在各种工业应用中得到使用。例如,由瑞典公司Ericsson在1980年代后期开发的Erlang最初用于实现容错电信系统,但此后在北电、Facebook等公司构建一系列应用程序时变得流行,ÉlectricitédeFrance和WhatsApp。Scheme,Lisp的一种方言,被用作早期AppleMacintosh计算机上多个应用程序的基础,并已应用于训练模拟软件望远镜控制等问题。OCaml于1990年代中期推出,已在财务分析、驱动程序验证、工业机器人编程和嵌入式软件的静态分析等领域看到商业用途。Haskell,虽然最初打算作为一种研究语言,在航空航天系统、硬件设计网络编程等领域也被一系列公司应用。

其他已在工业中使用的函数式编程语言包括Scala、F#、Wolfram语言、Lisp、StandardML、和Clojure。

功能性“平台”在金融领域的风险分析中很受欢迎(尤其是大型投资银行)。风险因素被编码为形成相互依赖的图(类别)的函数,以衡量市场变化中的相关性,这与格罗布纳基础优化不同,但也适用于监管合规性,例如综合资本分析和审查。鉴于在金融中使用OCAML或CAML变体,这些系统有时被认为与分类抽象机或CAM相关。事实上,函数式编程深受范畴论的影响。

教育

许多大学教授或已经教授函数式编程作为其本科计算机科学学位的一部分。有些人使用它作为他们对编程的介绍,而另一些人则在教完命令式编程之后教它。

在计算机科学之外,函数式编程被用作教授问题解决、代数和几何概念的一种方法。它也被用作在经典力学的结构和解释中教授经典力学的工具。


内容由匿名用户提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/124588/

发表评论

登录后才能评论

词条目录
  1. 函数式编程
  2. 函数式编程的历史
  3. 函数式编程的应用
  4. 电子表格
  5. 学术界
  6. 工业
  7. 教育

轻触这里

关闭目录

目录