λ (Lambda)

2018-03-18  本文已影响36人  V_coa

什么是函数式编程?

函数式编程是一种计算机编程范式,它依赖于模仿数学上的函数。函数式编程本质上是组合各种表达式,表达式包括一些值,变量和函数,函数会应用一些输入参数,然后会进行一些计算,一般会有返回值,函数式编程语言是基于 lambda 演算的。

函数的透明引用(Referential transparency):对于同一个函数,给它相同的参数,然后同样的返回值,表现的像数学上的函数一样。

什么是函数?

如果不用lambda这个词,可能大概知道函数是什么了。函数会用入参和返回值,函数定义了它的入参是什么,然后它的返回值是什么,例如一个加法函数(add),有两个入参,有一个和的返回值。又例如我们有一个函数名为 f,有下面如下关系:

f(1) = A
f(2) = B
f(3) = C

输入的参数的集合是 {1, 2, 3}, 输出的集合的参数是 {A, B, C}, 一个重点是这些关系是怎么定义的,假设当入参是 1 的时候,函数的返回值一定是 A, 而不会出现 f(1) = Xf(1) = Z 这些情况。在前面提到的透明引用,当一个函数有相同的入参,返回值一定是相同的。下面的情况也是满足的,因为对于相同的入参,返回值是确定的,只不过是它们返回值刚好相同了

f(1) = A
f(2) = A
f(3) = A

lambda 结构

lambda 含有:表达式(expression), 变量 和 抽象(abstraction)。expression 可以和变量和抽象,或者它们的组合。expression 可以是变量,这个变量有个名称,但是可以是函数的名称

abstractions 有两部分,head 和 body, head 是 λ(lambda),接着是变量名,body 是函数的其他表达式,如下:

λx.x

lambda λx.x 没有名字,它是一个匿名函数

ch1_1.png

α 等价 (Alpha equivalence)

这里的变量 x 没有什么特别的意思,它就是一个表示,可以替换成 y 或者 z, 它们都是同一个函数的,这里称这种为 α 等价

λx.x
λy.y
λz.z

β 化简 (Beta reduction)

当函数应用入参的时候,会把入参的表达式替换 body 内相应的值,消除 head 相关的入参,提供一个绑定变量的作用,这个过程称为 β 化简,例如

𝜆x.x

进行 β 化简,应用 2 替换 x,得到

(𝜆x.x)2
      2

Free variables

y 在 body 内,但是没有出现在 head 中,进行参数绑定,y 称为 Free variables

(𝜆𝑥.𝑥𝑦)𝑧
zy

Combinators

body 内出现的变量,在 head 参数中都出现过。就是 Combinators

最后

参考

上一篇下一篇

猜你喜欢

热点阅读