2017-11-18 153 views
0

我有這個事實或數據庫序言,看看教育是否相同或不足。例如高中< =高中是真的,高中< = phd也是如此,但是高中< =高中是錯誤的。如何停止在prolog中打印兩次相同的值?

edu_less(high_school, bachelor). 
edu_less(bachelor, masters). 
edu_less(masters, phd). 

edu_lessOrEqual(X,X). 
edu_lessOrEqual(X, Y):- edu_less(X,Y). 
edu_lessOrEqual(X, Y):- edu_less(X,Z), 
         edu_lessOrEqual(Z,Y). 

但這輸出

edu_lessOrEqual(masters, phd). 
true; 
true; 
false. 

時,我想只有一個真正的在輸出打印。

true; 
false. 

回答

2

基本上,這是因爲edu_lessOrEqual/2第一部分中,您遞歸調用edu_lessOrEqual/2,所以你風與Z和Y同時實例化phdphd其實等於phd所以它滿足的情況下,你已經闡明的邏輯)。你可以通過在第三個子句的最後添加Z \= Y來糾正它,但是這種情況下我會試圖使用一個條件語句來確保我沒有結束無用的選擇點。

相關問題