〖瞎扯專欄〗 Omega Calculus (草稿)

前提: Lambda Calculus 定義函數的運作,以現代的用語來說, Lambda Calculus 定義程式的運作。而我們知道,函數語言關心函數,而物件導向語言,則關心物件。後者即關心資料。但是,形式化的方式,世界前瞻的研究是以 Lambda Calculus 的變化型態,來關心所謂 Calculus for Object 。筆者對於 Zebra Puzzle 需要由專屬於物件的定義開始進行,因此自行發明所謂 Omega Calculus 。

關於 Omega Calculus ,我首先想到的是像 ωx.M 這樣的文字,這樣寫的用意,是想要模仿 λx.M 的寫法。假設 M 是一個物件,內容基本上就是 [ a:x, b:y, c:z, … ] 這樣的資料, a, b, c 代表物件內的資料欄位, x, y, z 則分別是每個欄位的值。 ((ω(a,x).M) (a,i)) = M{a:i/a:x} 的意思是在物件 M 內將 a:x 換成 a:i ,而 ω(a,x).M 稱為 Object Abstraction ,而 ((ωx.M) y) 格式稱為 Object Application 。

關於 Zebra Puzzle ,給你五幢房子,並且提出你十五道假設,這是一個標準的 Horn Clause 。我的解題思維是,假如這題的答案是一盤棋局的樣子,那麼,每一道假設都會產生這一盤棋的一些局部,第一道加上第二道,再加上第三道,一批又一批的局部棋局拼合起來,最後投射出答案。我苦想了一陣子,覺得所謂的解,就是一些棋盤樣子的集合。每一盤棋盤的樣子,是一個陣列,共有五個索引值,對應到五個物件。每一個物件有五個屬性,包括國籍、顏色、煙、飲料、寵物等。

為了解答 Zebra Puzzle ,我需要 Omega Calculus 。 Omega Calculus 包含一些長相很像 Lambda Calculus 的詞彙,包括變數、 abstraction 、 application 等等。此外, Omega Calculus 還有一套演繹系統,至少支援兩個基本運算,即 commute 與 absorb 。 commute 作用在至少兩個物件上,透過演繹系統,可以推衍出全部物件的任何一種排列順序,這些排列順序的集合是 commute 的產出。 absorb 作用在一前一後兩個物件上,前者稱為被動物件,後者稱為附加物件,如果前者可以與後者合併,則合併結果為 absorb 的產出,或者,如果兩個物件無法合併,則產出為空值 ε 。

圖說:在 facebook 上提到 ω-Calculus

圖說:在 facebook 上提到 ω-Calculus

廣告

About 黃耀賢 (Yau-Hsien Huang)

熱愛 Erlang ,並且有相關工作經驗。喜歡程式語言。喜歡邏輯。目前用 Python 工作。
本篇發表於 Problem 並標籤為 。將永久鏈結加入書籤。