根據維基百科,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))遞歸