
226
|
第 7 章
利用
#minimize
,並且重複呼叫用來執行單一模擬步驟的基元遞迴函式,就可以完全模
擬圖靈機。模擬物會持續到機器停止,但如果一直不發生,就會永遠執行。
SKI 組合器演算
SKI
組合器演算
(
SKI combinator calculus
)是操縱運算式語法的規則系統,就如同 lambda
演算。雖然 lambda 演算已經非常簡單,但它還是有 3 種運算式(變數、函式、呼叫),
而我們曾在第 208 頁『語意』看到,變數會讓化簡的規則變得有點複雜。SKI 演算甚至
更為簡單,只有兩種運算式呼叫和字母
符號
(
symbol
),而且規則也更為簡單。它所有
的威力來自 3 個特殊符號:
S
、
K
、
I
,稱為
組合器
(
combinator
),每個都有自己的化簡
規則:
• 將
S[
a
][
b
][
c
]
化簡成
a
[
c
][
b
[
c
]]
,其中
a
、
b
、
c
可以是任何的 SKI 演算運算式。
• 將
K[
a
][
b
]
化簡成
a
。
• 將
I[
a
]
化簡成
a
。
例如以下是化簡運算式
I[S][K][S][I[K]]
的其中一種方式:
I[S][K][S][I[K]] → S[K][S][I[K]] (
reduce I[S] to S
)
→ S[K][S][K] (
reduce I[K] to K
)
→ K[K][S[K]] (
reduce S[K][S][K] to K[K][S[K]]
)
→ K (
reduce K[K][S[K]] to K
)
請注意,這裡沒有繼續替換 lambda 演算樣式的變數,只是根據化簡規則針對符號進行 ...