Introspector/KifTutorial
這是一個基於知識交換格式的簡短示例教程。它不完整,也不完全正確,但它應該讓你對 KIF 可以做什麼有一個瞭解。
我在這裡使用的知識庫是對人際關係的簡單表示。基本上存在兩種關係:家庭和朋友。家庭有三種:父親、母親、孩子。朋友只有一種。為了我們的目的,合作伙伴也是朋友。讓我們從輸入一些資料開始
(male Fred) (male John) (female Martha) (female Joan) (female Betty) (female Alice)
Fred 和 John 是男性,Martha、Joan、Betty 和 Alice 是女性。
(father Fred John)
John 是 Fred 的父親
(mother Fred Martha)
Martha 是 Fred 的母親
(father Pete Fred)
Fred 是 Pete 的父親
(mother Pete Joan)
Joan 是 Pete 的母親
(friend Pete Betty)
Betty 是 Pete 的朋友
(mother Alice Martha)
Martha 是 Alice 的母親
(mother Betty Alice)
Alice 是 Betty 的母親
現在,如果我們能從這些關係中得到一些資訊就好了。例如,_我們_知道 Fred 是 Pete 的孩子,但計算機不知道。讓我們告訴他這一點。
(defrelation child (?p ?c) :=
(or (mother ?c ?p) (father ?c ?p)))
現在我們說,有人,現在稱為 ?c,是某個人的孩子,現在稱為 ?p,如果 ?p 是 ?c 的母親,或者如果 ?p 是 ?c 的父親。
讓我們定義一些其他關係
(defrelation son (?p ?c) :=
(and (male ?c) (child ?p ?c)))
(defrelation daughter (?p ?c) :=
(and (female ?c) (child ?p ?c)))
兒子是男性孩子。女兒是女性孩子。
現在開始查詢,從知識庫中獲取資訊。以下是一些查詢及其結果,在 => 後面。
(male Fred) => true (female John) => false
這些都是簡單的查詢,只返回真或假。請注意,您的實現可能會以不同的方式顯示結果(因為我在編寫本文時根本沒有使用直譯器(除了我的大腦),所以這實際上是合乎邏輯的)。
(male ?x) => ?x = Fred, ?x = John
在這裡,我們詢問系統:對於話語宇宙(現在稱為 ?x)中的每個物件(包含所有存在的物件的集合)是男性((male ?x) => true),告訴我 ?w 的值是什麼。
下一個例子,使用兩個變數進行查詢
(daughter (?x ?y)) => (?x = Alice, ?y = Martha), (?x = Betty, ?y = Alice)
如您所見,使用兩個變數也會產生正確的結果。
現在讓我們在查詢中進行選擇。假設我們想要 Fred 的姐姐。
(and (daughter (?x ?y)) (son (?x Fred))) => (?x = Martha, ?y = Alice)
您可以想象,我們可以用它來程式設計關係
(defrelation sister (?s ?o) :=
(and (daughter ?x ?y) (child ?y ?o)))
現在到“底部”。有時您想說:這可以是任何東西,但我並不關心它是什麼。KIF 透過底部支援這一點。如果您寫底部,您就是在說:這可以是任何東西,但您不會被告知它是什麼。例如
(son bottom ?x) => ?x = Fred, ?x = Pete
在這個查詢中,我們詢問了所有的兒子,但沒有問他們的父母。
更多內容待續,待我更新維基 :-)。