我正在嘗試使用以下規則覆寫顏色屬性:-
prop(color, bmw, yellow).
prop(color, audi, red).
maps(mycar, subset, bmw).
maps(hiscar, isa, audi).
%Rules
hasproperty(Property, Object, Value) :-
maps(Property, Object, Value).
hasproperty(Property, Object, Value) :-
maps(Object, subset, Parent);
hasproperty(Property, Parent, Value),
maps(Property, Ojbect, _).
hasproperty(Property, Object, Value) :-
maps(Object, isa, Parent),
hasproperty(Property, Parent, Value),
maps(Property, Ojbect, _).
但是我得到了一個錯誤的值,它應該被繼承為紅色,但我得到了黃色,為什么會發生這種情況?
17 ?- hasproperty(color, hiscolor, Z).
Z = yellow.
應該是 Z= 紅色
uj5u.com熱心網友回復:
你的程式有很多錯誤,你應該在將檔案加載到 prolog 后閱讀警告。
- 為什么
;在hasproperty謂詞的第二個子句中使用? - 你拼寫
Object為Ojbect在最后兩個條款。 - 你為什么
property(Property, Ojbect, _)在最后兩個子句中斷言? - 除非你有很好的理由,否則你應該在一個地方定義一個謂詞的所有子句。不要穿插
rel和property那樣。如果您有充分的理由這樣做,則必須使用discontiguous來宣告它們。
Prolog 應該已經警告過你關于 2 和 4。
uj5u.com熱心網友回復:
在
它在 qe2 上尋找輪子,但沒有找到。
然后它尋找 qe2 作為任何東西的子集,不。
然后它尋找任何帶輪子的東西,發現land有 4 個輪子 (??)。
然后它會尋找任何帶輪子的東西(因為 Ojbect 的拼寫錯誤,它不會尋找 qe2 - 謝謝 rajashekar!我被卡住了,為什么它表現得很奇怪)。
發現陸地有4個輪子,有輪子的東西存在,所以這成為第一個答案。
你的代碼在這里:
hasproperty(Property, Object, Value) :-
rel(Object, subset, Parent);
hasproperty(Property, Parent, Value), <----- wheels, land, 4
property(Property, Ojbect, _). <--typo Ojbect
所以4來自陸地。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/314623.html
下一篇:克服Rust中缺乏繼承的問題
