比较prolog中超过2个列表的元素,以确定两个元素是否完全相同

时间:2017-04-27 13:41:22

标签: prolog

每个清单代表一个客户及其汽车品牌和颜色:

customer([_Name,_Surname,_Car,_Color]).

我想知道我是否可以检查超过2个列表,没有客户拥有相同颜色的同一辆车。因为每个客户的姓名和姓氏都不同,(意味着只有_Car和_Color可以在列表中使用相同的值),我认为一种方法是检查列表中没有完全相同的2个元素。 列表的一个例子是:

customer1([john,brown,vw,black]).
customer2([will,smith,audi,green]).
customer3([nick,cave,bmw,blue]).
customer4([jim,beam,bmw,black]).

在这个例子中,没有相同的品牌和相同的颜色,所以这是真的。

我想象的是:

result:-customer1(X1,Y1,Z1,W1), 
customer2(X2,Y2,Z2,W2), 
customer3(X3,Y3,Z3,W3),
customer4(X4,Y4,Z4,W4),
(check that no Z's AND W's are the same).

这可能吗?

2 个答案:

答案 0 :(得分:2)

这将告诉您两个列表是否共享同一辆车&颜色:

sameCarAndColor( [_,_,Car,Color], [_,_,Car,Color] ).

要检查超过2个,只需在每个可能的列表对上使用它。

答案 1 :(得分:2)

此查询将回答具有相同颜色的相同汽车的不同人:

?- customer([Name1,Surname1,Car,Color]), customer([Name2,Surname2,Car,Color]), ( Name1 \= Name2 ; Surname1 \= Surname2).