2016-01-21 95 views
0

說你有如何通過其特定屬性排除記錄?

book('Hps','Pages','twohundred'). 
book('Lww','Pages','onehundred'). 
book('Aff','Pages','onehundred'). 
book('Jin','Pages','onehundred'). 

book('Hps','Colour','Black'). book('Lww','Colour','Red'). book('Aff','Colour','Red'). book('Jin','Colour','Black').

而且要發現它們是一百頁長的所有書籍的程序,但要排除的書籍,都是黑色的,你將如何去它?

我有以下規則

bookohpnb(X) :- book(Y,_,'onehundred'), book(Y,_,

但我想不出如何完成它的方式,這將排除這本書成果,這是黑色的。

我知道我可以讓程序找到紅色的,但我給出的例子只是一個非常大的程序的一小部分,在更大的程序中有更多的記錄。

回答

0

它已經太多年了,我不是在序言編碼,所以乾脆原諒我,如果它不工作:

bookohpnb(X) :- 
    book(Y,_,'onehundred'), 
    book(Y,_,C), 
    not(C = 'black'). 
+0

我不認爲一個相當有效。如果有幫助,我需要展示一百頁的書籍縮寫('Hps','Lww''Aff''Jin'),並且不是黑色的。因此,查詢「bookohpnb(X)」的第一個結果。將是'Lww' - 打';'而下一個結果將是'Aff'。 –

+0

我的不好,是的,你是對的,這是非常有用的 - 謝謝。 –

+1

你應該用'\ +','\ + C ='Black''來代替'not'。這與'C'='Black''相同。任何方式,最好使用'dif(C,'Black')':參見'dif/2'上的文檔來了解更多。同樣奇怪的是,您將'book/3'的第二個參數作爲一個自由變量:最好說'book(B,'Pages','onehundred'),book(B,'Color',C) ,dif(C,'Black')。' – 2016-01-21 05:50:25

相關問題