Prolog中列表中的第一个查询和复制元素

时间:2011-04-24 10:29:59

标签: prolog prolog-setof

我是Prolog的新手。我在下面写了基本代码。

flight(acompany, paris, 7).
flight(bcompany,paris,7).
flight(ccompany,paris,7).
flight(dcompany,paris,7).

search([X],Y,Z) :- flight(X,Y,Z).

search([X|T],Y,Z) :- search(T,Y,Z) , flight(X,Y,Z).

我想做两件事。 首先我查询为

?- search(X, paris,7).

prolog告诉我的第一件事是

X = [acompany]

但我希望在第一个查询中看到列表中的所有元素。

X = [acompany, bcompany, ccompany, dcompany]

我想要的第二件事是避免重复列表中的元素。

例如;

X = [acompany] ;
X = [bcompany] ;
X = [ccompany] ;
X = [dcompany] ;
X = [acompany, acompany] ;

我不想要这样的最后一个清单。

我该如何解决这两件事?感谢。

1 个答案:

答案 0 :(得分:1)

?- setof(X, flight(X, _, _), Xs).
Xs = [acompany, bcompany, ccompany, dcompany].