我是序言新手。 我在我的大學參加AI課程,所以我們不能使用先進的Prolog功能:只需簡單的事實和超簡單的規則。基本序言規則創建
我有一些麻煩,這兩個句子轉換爲Prolog的條款:
- 大家誰愛所有的動物是由人的喜愛。
- 任何殺死動物的人都不會被任何人所喜愛。
我總算寫第二個這樣的:
loves(X, Y) :- animal(A), \+killed(Y, A).
但即使是這一個,我肯定這是不完全正確:這個規則告訴大家誰沒有殺死動物,每個人都喜歡,這與我想表達的相反。
任何幫助?
我是序言新手。 我在我的大學參加AI課程,所以我們不能使用先進的Prolog功能:只需簡單的事實和超簡單的規則。基本序言規則創建
我有一些麻煩,這兩個句子轉換爲Prolog的條款:
我總算寫第二個這樣的:
loves(X, Y) :- animal(A), \+killed(Y, A).
但即使是這一個,我肯定這是不完全正確:這個規則告訴大家誰沒有殺死動物,每個人都喜歡,這與我想表達的相反。
任何幫助?
你研究過謂詞演算,量詞的邏輯嗎?
這兩個陳述在Prolog中表達的真值有問題。第一個假設對於所有熱愛「所有動物」的Y而言,存在着一個愛X的人,但卻沒有告訴我們如何「構造」X.第二個人表達了對否定性聲明的理解:「任何殺死動物的人沒有人愛過。「
潛在地,你可能擁有表達所有人的知識,誰愛誰,誰愛所有動物,誰殺死動物。然後你可以寫查詢,檢查1,2是否成立。這與試圖用規則和事實來斷言1,2的真相不同。
你重寫了你的問題與對手。好。
但你表達了它作爲所有其他條件的分離。而應該定義
killed_no_animal(Y) :- forall(animal(A), \+killed(Y, A)).
並使用killed_no_animal
作爲必要條件的所有其他謂詞:
loves(X, Y) :- killed_no_animal(Y), other predicate.
loves(X, Y) :- killed_no_animal(Y), other predicate.
什麼是** **事實(正的知識),你有嗎? – CapelliC