Haskell語言學習筆記(79)lambda演算

2021-08-21 12:07:33 字數 1056 閱讀 9142

根據維基百科,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...