-
Notifications
You must be signed in to change notification settings - Fork 94
02 LambdaCalculus
Lambda Calculus 是數學和計算機科學中的一種形式系統,由 Alonzo Church 在 1930 年代提出。它是研究函數抽象與應用的理論基礎,並被認為是計算理論的核心之一。Lambda Calculus 使用一種簡單的語法來描述所有的計算邏輯,其基本單位是函數。
Lambda Calculus 的核心目標:
- 使用簡單的語法來描述計算。
- 定義函數與它們的應用。
- 提供計算的形式化基礎。
-
理解計算的本質
Lambda Calculus 是所有現代程式語言的理論基礎,特別是函數式程式設計語言如 Haskell、Lisp 和 Clojure。 -
強化邏輯思維能力
學習 Lambda Calculus 需要理解純函數的抽象表示,這對程式設計邏輯的提升大有幫助。 -
應用於現代技術
Lambda Calculus 的概念廣泛應用於編譯器、型別系統和人工智慧(如 Lambda 表達式在深度學習中的應用)。
Lambda Calculus 的語法只有三個基本部分:
-
變數 (Variable):表示一個函數的參數或值。
範例:x、y。 -
函數抽象 (Abstraction):用於定義一個函數,語法為
λx.E,表示一個變數x與表達式E。
範例:λx.x+1表示一個接收參數x並返回x+1的函數。 -
函數應用 (Application):將一個函數應用於一個參數,語法為
(F X),表示將函數F應用到參數X上。
範例:(λx.x+1 2)表示將數字2傳入函數λx.x+1,結果為3。
-
α-轉換 (Alpha Conversion)
改變函數參數的名稱,而不影響函數的邏輯。
範例:λx.x可以改寫為λy.y。 -
β-簡化 (Beta Reduction)
將函數應用於實際參數,並計算出結果。
範例:(λx.x+1 2)簡化為2+1 = 3。 -
η-轉換 (Eta Conversion)
簡化表達式,使其等價於一個更簡潔的形式。
範例:λx.(F x)等價於F,若F在x無其他依賴。
-
邏輯運算的表示
- 定義布林值:
TRUE = λx.λy.x,FALSE = λx.λy.y。 - 定義 IF 條件:
IF = λc.λx.λy.c x y。
- 定義布林值:
-
數字與算術運算的表示(Church Numerals)
- 數字
0:λf.λx.x - 數字
1:λf.λx.f x - 加法運算:
ADD = λm.λn.λf.λx.m f (n f x)。
- 數字
-
遞迴與 Y-Combinator
遞迴是一種重複應用函數的技術,Y-Combinator 是 Lambda Calculus 中的遞迴工具,形式為:Y = λf.(λx.f (x x)) (λx.f (x x))
本章介紹了 Lambda Calculus 的歷史、語法、核心概念和基本應用,並簡單說明如何用 Python 模擬其語法。從下一章開始,我們將深入探索如何用 Python 實現邏輯運算、數字運算與資料結構,並逐步搭建 Lambda Calculus 的運算模型。
從希爾伯特到圖靈的那些故事
-- 以 Python 展現這些故事背後的程式