如何在Prolog中使用findall避免重复输出?

时间:2016-07-05 15:29:50

标签: prolog

我正在使用以下代码:

father_child(tom, sally).
father_child(john, alfred).
father_child(george, peter).
father_child(tom, dick).
father_child(john, harry).
father_child(george, eliz).

siblings(X, Y):-  father_child(Z, X), father_child(Z, Y), dif(X,Y). 

我可以使用以下代码获取所有兄弟姐妹的列表,但它会产生重复输出,其中兄弟位置设置为反转。如何避免这种情况:

?- findall((X,Y), siblings(X,Y), L).
L = [ (sally, dick), (alfred, harry), (peter, eliz), (dick, sally), (harry, alfred), (eliz, peter)].

1 个答案:

答案 0 :(得分:4)

一种方法是,不使用class StockController{ $obj=new StockController(); $obj->checkAccessRights(); public function checkAccessRights(){ //some code here } public function getPID(){ //some code here } } ,而是使用dif/2作为一种方法,不仅要确保它们不同,而且要按特定顺序排列,确保对的唯一性:

@</2