3 回答

TA貢獻1789條經(jīng)驗 獲得超10個贊
這是因為統(tǒng)一的工作方式。如果先放差異,則X和Y的值尚未統(tǒng)一為任何值??紤]一下跟蹤:
goal list: [sibling(bob, Z)]
goal: sibling(bob, Z).
X-> bob, Y -> Z
goal list: [difference(bob, Y), mother(M, bob), mother(M, Y), father(F, bob), father(F, Y).]
goal: difference(bob, Y) --SUCCESS
goal list: [mother(M, bob), mother(M, Y), father(F, bob), father(F, Y).]
goal: mother(M, bob)
...
當您將差異調(diào)用放在最后時,X和Y都已統(tǒng)一,并且如果它們的值相同,則差異將失敗。然后將發(fā)生回溯。
使用序言環(huán)境的跟蹤功能可以查看執(zhí)行過程中逐步發(fā)生的情況。

TA貢獻1871條經(jīng)驗 獲得超13個贊
Wrt:“如果將其放在規(guī)則的“末尾”,則很有可能最終會出現(xiàn)在“數(shù)據(jù)記錄”中,并且無論如何都可以直接使用(\ ==)/ 2。這是一個誤解:當單獨使用(\ ==)/ 2時,不能保證結(jié)果將是正確的。但是iso_dif/2
只要沒有錯誤,它們就是正確的。
添加回答
舉報