-
Notifications
You must be signed in to change notification settings - Fork 0
/
Fp的历史和特点
27 lines (27 loc) · 2.08 KB
/
Fp的历史和特点
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
函数式编程历史:
函数式编程思想的源头可以追溯到 20 世纪 30 年代,数学家阿隆左 . 丘奇在进行一项关于问题的可计算性的研究,也就是后来的 lambda 演算。
lambda 演算的本质为 一切皆函数,函数可以作为另外一个函数的输出或者 / 和输入,一系列的函数使用最终会形成一个表达式链,这个表达式链
可以最终求得一个值,而这个过程,即为计算的本质。
然而,这种思想在当时的硬件基础上很难实现,历史最终选择了同丘奇的 lambda 理论平行的另一种数学理论:图灵机作为计算理论,
而采取另一位科学家冯 . 诺依曼的计算机结构,并最终被实现为硬件。由于第一台计算机即为冯 . 诺依曼的程序存储结构,因此运行在此平台
的程序也继承了这种基因,程序设计语言如 C/Pascal 等都在一定程度上依赖于此体系。到了 20 世纪 50 年代,一位 MIT 的教授 John McCarthy
在冯 . 诺依曼体系的机器上成功的实现了 lambda 理论,取名为 LISP(LISt Processor), 至此函数式编程语言便开始活跃于计算机科学领域。
-----------------------------------------------------------------------------
比较命令式编程和函数式编程:
编程风格:
命令式:一步一步地执行,并且要管理状态的变化
函数式:描述问题和所需的数据变化以解决问题
状态变化:
命令式:很重要
函数式:不存在
执行顺序:
命令式:很重要
函数式:不太重要
主要的控制流:
命令式:循环、条件、函数调用
函数式:函数调用和递归
主要的操作元:
命令式 : 结构体和类对象
函数式:函数作为一等公民的对象进行数据集
函数式语言的语法必须要顾及到特定的设计模式,比如类型推断系统和匿名函数。大体上,这个语言必须实现lambda演算。
并且解释器的求值策略必须是非严格、按需调用的(也叫做延迟执行),它允许不变数据结构和非严格、惰性求值。