根据维基百科,lambda演算(英语:lambda calculus,λ-calculus)是一套从数学逻辑中发展,以变量绑定和替换的规则,来研究函数如何抽象化定义、函数如何被应用以及递归的形式系统。函数
lambda演算由 lambda 项的语言构成。基本的 lambda 项只包含如下三种:code
语法 | 名称 | 描述 | Haskell语言中的相应表述 |
---|---|---|---|
a | 变量 | 表示参数或数学/逻辑值的字符或字符串 | a |
(λx.M) | 抽象化 | 函数定义(M是一个lambda项)。 变量x在表达式中已被绑定。 |
(\x -> M) |
(M N) | 应用 | 将函数应用于参数。 M 和 N 是 lambda 项。 | (M N) |
λx.((λx.x)x)
的含义是\x -> ((\x -> x) x)
,即总体是一个函数定义。(λx.(λx.x))x
的含义是(\x -> (\x -> x)) x
,即总体是一个函数应用。(λx.x)
,即(\x -> x)
,可是语义不一样。lambda演算 (λf.f 3)(λx.x+2) = (λx.x + 2) 3 = 3 + 2 (λx.λy.x - y) 7 2 = (λy.7 - y) 2 = 7 - 2 Haskell (\f -> f 3)(\x -> x+2) = (\x -> x + 2) 3 = 3 + 2 (\x -> \y -> x - y) 7 2 = (\y -> 7 - y) 2 = 7 - 2
ω := λx.x x
Ω := ω ω
Y := λg.(λx.g (x x)) (λx.g (x x))递归