跳轉到內容

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

在這個查詢中,我們詢問了所有的兒子,但沒有問他們的父母。


更多內容待續,待我更新維基 :-)。

華夏公益教科書