根據維基百科,lambda演算(英語:lambda calculus,λ-calculus)是一套從數學邏輯中發展,以變數繫結和替換的規則,來研究函式如何抽象化定義、函式如何被應用以及遞迴的形式系統。
lambda演算由 lambda 項的語言構成。基本的 lambda 項只包含以下三種:
語法名稱
描述haskell語言中的相應表述a變數
表示引數或數學/邏輯值的字元或字串
a(λx.m)
抽象化函式定義(m是乙個lambda項)。
變數x在表示式中已被繫結。
(\x -> m)
(m n)
應用將函式應用於引數。 m 和 n 是 lambda 項。
(m n)
* 作為 lambda 項的變數無須宣告
* lambda 抽象化是一種匿名函式的定義。
* lambda 應用即函式呼叫。
* 括號可以改變語義。
λ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))
Haskell語言學習筆記(68)HDBC
cabal install hdbc sqlite3 installed hdbc sqlite3 2.3 3.1 prelude m database.hdbc database.hdbc sqlite3 prelude database.hdbc database.hdbc sqlite3 pr...
Haskell學習筆記 Monads
monads 翻譯叫 單子 或者 乙個自函子上的么半群 好吧除了讓人費解沒有什麼用 同樣舉乙個書上的例子 data expr val int div expr expr eval expr maybe int eval val n pure n eval div x y pure safediv e...
Verilog HDL語言學習筆記
verilog hdl語言 verilog hdl 是一種硬體描述語言 hdl hardware discription language 是一種以文字形式來描述數字系統硬體的結構和行為的語言。用它可以表示邏輯電路圖 邏輯表示式,還可以表示數字邏輯系統所完成的邏輯功能。是由gateway desig...