我面臨的問題有點瑣碎。我想在Prolog中不使用邏輯,但是這似乎not/1不是我想要的東西:course(ai).course(pl).course(os).have(X,Y) :- course(X),course(Y),not(X = Y).我查詢:have(X,Y), write(X-Y), nl , fail.而且我沒有得到想要的結果:(
3 回答

慕虎7371278
TA貢獻1802條經驗 獲得超4個贊
在SWI-Prolog和GNU Prolog中,以下都應該起作用:
have(X, Y) :- course(X), course(Y), X \= Y.
在SWI-Prolog中,您還可以使用dif/2,它可以更加方便,因為您可以在謂詞中更早地使用它:
have(X, Y) :- dif(X, Y), course(X), course(Y).

慕少森
TA貢獻2019條經驗 獲得超9個贊
作為上述用戶“假”答案的補充,即
“代替not(X = Y),您需要編寫\ + X = Y,”
這可能給人的印象是:
一種?!?not”和“ \ +”是不同的東西
b。\ +將起作用,而不是,則不會。
我的理解是“ not”和“ \ +”是等效的,但是\ +在現代Prolog程序中是首選,因為它傳達了一種更直觀的感覺。具體而言,盡管“不”可能暗示粗心的編碼器“不正確”,而“ \ +”卻暗示“不可證明”,這與該操作實際上在說什么很接近。在Prolog中,“不是”是“否定即失敗”的一個示例,但是可以感覺到\ +將使程序員更清楚在任何給定規則中確切地斷言了什么。因此,您可以使用“ not”(大多數PL實現將其保留為向后兼容),但要成為慣用的現代PL程序員,您可能應該更喜歡使用\ +。
添加回答
舉報
0/150
提交
取消