2016-01-21 56 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

相关问题