函数式程序设计语言_第1页
函数式程序设计语言_第2页
函数式程序设计语言_第3页
函数式程序设计语言_第4页
函数式程序设计语言_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、函数式程序设计语言函数式程序设计语言1、概论 面向过程程序设计 面向对象程序设计 函数式程序设计2、什么是函数式程序设计In computer science, functional programming is a programming paradigm that treats computation as the evaluation of mathematical functions and avoids state and mutable data. From wikipedia函数式程序设计是一种程序设计模型,它将计算机运算看作是数学中函数的计算,并且避免了状态状态以及变量变量的概

2、念。3、变量的不变性如果有多个进程在同时跑这一个程序,那么程序应该先desposit 还是先 despositTwice?无论多少个进程在跑,因为我们本身没有赋值操作,所以都不会影响到我们的最终结果。采用这样的方式没有办法保持状态,这也就是我们在之前概念中看到的无状态性。程序设计能从冯诺依曼式的设计风格中解放出来吗?函数式程序设计及其程序代数John Backus于1977年接受ACM图灵奖时的讲演稿4、冯诺依曼和函数式程序的比较 求内积的冯诺依曼程序该程序值得注意的几个性质:1) 程序中的语句以某种复杂的规则作用在不可见的“状态”上。2) 程序不是层次性的,除了赋值语句的右部外。3) 程序是

3、动态和重复的。4) 程序是通过对变量i的修改和赋值语句的重复而逐字计算的。5) 部分数据(如n)是局部于程序的,因而缺少通用性。6) 程序命名了其中的量, 因而只对名为a 和b 的向量有效。7) 程序的“内务” 操作是用分散在几处的符号来表示的。 求内积的函数式程序Def Innerproduct (Insert +)(Apply To All )Transpose或简写为Def IP ( / + )( )Trans将已知函数组合成新函数的函数型。fg 是先作用g再作用f所得的函数。f是把f作用到每个分量上的函数。f : x 表示把f作用到对象x上所得的结果Def IP ( / + )( )T

4、ransIP: , =(IP的定义) = ( / + ) ( )Trans: , ( 的作用) = ( / + ) :( ( ) : ( Trans: , ) )(Trans的作用) = ( / + ) :( ( ) : , , )( 的作用) = ( / + ) : : , : , : ( 的作用) = ( / + ): ( / 的作用) = +: 6, +: ( + 的作用) = +: ( + 的作用) = 28Def IP ( / + )( )Trans和冯诺依曼程序的比较:1) 该程序只作用在单个变元上, 没有隐含的状态及状态转换规则。2) 该程序具有层次性, 它由三个较简单的函数(

5、+ , , Trans ) 和三个函数型fg,f和/f构成。3) 该程序是静态和非重复的, 无需考虑其执行情况。4) 该程序作用在整个概念单位上, 而不是作用在单个的字上, 它可分为三步, 但没有一步是重复的。5) 该程序本身不涉及任何数据, 它是完全通用的, 对任何相容向量对都有效。6) 该程序对所作用的变元不命名, 因而无需过程说明或复杂的代入规则就能作用到任一向量对上去。7) 该程序中所用到的“内务” 函数及函数型在其它许多程序中也是通用的。5、FP系统 “程序”只是没有变量的函数。 FP系统是建立在使用一固定的函数型集合的基础上的。这些函数型再加上一些简单的定义,是由已知函数构造新函数

6、的唯一手段。它们不涉及到变量和代入规则的使用,而是与程序相伴的代数的运算。 FP系统的所有函数都是同一类型的, 即从对象到对象的单一映射。1 ) 对象集合O;2 ) 把对象映射成对象的函数f的集合F ;3 ) 一个运算, 即作用;4 ) 函数型的集合F , 函数型的作用是将F中的已知函数或对象组合成新的函数;5 ) 定义集台D , 它用来足义F 中的某些函数, 并且对每个函数指定一个名;底元6、FP系统的组成7、函数式程序的性质 函数式程序对其作用对象或中间结果不命名, 它不含变量, 没有循环, 没有控制语句, 也没有过程说明; 它不需要初启指令,不是逐字式性质的程序; 它是从简单到复杂逐层构

7、造的; 程序中所用的是普遍适用的内务操作型和运算符; 该程序是完全通用的, 当作用对象不满足要求时, 一律得到结果; 它没有限制不必要的求值次序 ; 利用代数法则能把该程序变为更“有效”、更易读的程序(即递归定义的程序)。8、作为程序设计语言的FP系统 函数f是一个程序, 对象x是存贮单元的内容, f : x 是对存贮单元的内容x作用f后所得到的存贮单元的内容, 定义集合是程序库, 系统提供的原始函数和函数型是某种特定的程序设计语言中的基本语句。 一旦选定了原始函数和函数型, FP系统的基本结构部分便为许多类型的语言提供了各种程序设计风格和设计能力。9、 函数式程序设计的数学本质 一切问题,归

8、根结底到最后都是数学问题。 对于数学函数f(x) = y,无论在什么场景下,都会得到同样的结果,这个我们称之为函数的确定性。 对于赋值模型,同一个函数,同一个参数,会在不同的场景下计算出不同的结果。这正是赋值模型与数学模型的不兼容之处。 而函数式程序设计取消了赋值模型,则使数学模型与编程模型完美地达成了统一。10、状态到底怎么办? 函数式编程是无状态的,可是在现实情况中,状态不可能一直保持不变,而状态必然需要改变、传递。所以在函数式程序设计中将其保存在函数的参数中,作为函数的附属品来传递。例:求例:求x的的n次方次方命令式程序设计命令式程序设计函数式程序设计函数式程序设计递归!11、相关的重要

9、概念 StackOverflow与尾递归 惰性求值与并行 Lambda演算 高阶函数与函数抽象性 Erlang、Haskell、Miranda、Lisp.12、函数式程序设计语言介绍 Lisp语言:最早的函数式语言McCarthy在1960年创立。其初始动机是为考虑匿名函数的表示, 开发一个用于Al的代数表处理语言。应该说在L isp开发早期演算的影响甚微, 但由于Lisp本身有很好的数学优美性, 它对函数语言的发展产生了重大影响。Lisp至今仍是最流行的函数语言, 主要用于智能系统的编程出于效率的考虑, 它现已变成一种不纯的、有副作用的函数语言。12、函数式程序设计语言介绍 FP语言:开创纯

10、函数语言研究之先河FP 语言用固定的泛函数结构和一些简单定义作为从现存函数构造新函数的唯一工具, 没有使用变量和替换规则, 程序的构造可视为程序代数操作。FP语言摆脱了以演算为基础的函数语言中存在的实现和表达能力方面的问题。在FP中, 函数是无类型的, 这极大简化了语法和语义, 然而, 由于任意函数可互相组合, 所以某些总产生的函数也可被构造, 这样当构造函数时, 程序员必须仔细检查所用的构造函数, 加重了编程负担。FP没有高阶能力, 从而也给表达能力带来了一些影响。12、函数式程序设计语言介绍 Miranda语言:商用纯函数语言Miranda程序是定义、函数和其他数据目标的集合, 写成递归方程的形式。它无需类型说明, 类型推理由编译器完成。其用户定义类型的引入主要通过说明一个自由代数实现, 这个自由代数还可附有一组规则。很多在其他语言中必须表示成抽象类型的数据类型可在Miranda中用代数数据类型和相关规则来表示。尽管如此,它还是提供了抽象类型机制, 通过显式的Abstype说明来实现。12、函数式程序设计语言介绍 Haskell语言:通用的纯函数语言Yale大学的Hudak等从统一函数语言的目的出发, 设计了Haskell语言, 它几乎包括了现今函数语言的所有优点, 当然, 它能否取代现行语言还有特时间来证明。 其他函数式

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论