2015-10-20 26 views
0

enter image description here序言Kbase實施

所以我的辦法解決這個問題是合乎邏輯的。一切都按預期工作。我的代碼如下:

employees(billSmith). 
employees(bobJones). 
employees(lindaHiggs). 

married(billSmith,karenSmith). 

parent(billSmith,tonySmith). 
parent(billSmith,lauraSmith). 

ensured(X) :- 
    employees(X), 
    ( parent(X,_) 
    ; married(X,_) 
    ). 

樣品查詢:

?- ensured(X). 
X = billSmith ; 
X = billSmith ; 
X = billSmith ; 
false. 

我的問題:我得到正確的輸出,但爲什麼我的輸出多餘的?我如何轉換我的實現以獲得單個非重複答案?

非常感謝幫助。謝謝!

+1

你可以添加割傷保證/ 1提交做過的選擇,但您的規則似乎是錯誤的 - 沒有地址家屬 – CapelliC

+0

你肯定**不**得到正確的輸出。您的問題陳述中提及的除勞拉史密斯以外的每個姓名都有保險(她不是未成年人)。你也拼寫「被保險人」。 (順便說一句,這是一種非常奇怪的書寫方式,但我想你沒有提出問題陳述)。 – 2015-10-20 07:14:07

+0

如果您實際上將所有信息以事實的形式放入數據庫中,您會發現制定查詢會更容易一些。目前,你錯過了一些。 – 2015-10-20 07:26:13

回答

0

只是一個提示:你完成KB需要

ensured(X) :- employees(X). 
ensured(X) :- employees(E), parent(E, X), age(X, A), A < 18. 
...