0

我是 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]

但我想在第一次查询时查看列表中的所有元素。

IE

X = [acompany, bcompany, ccompany, dcompany]

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

例如;

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

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

我该如何解决这两个问题?谢谢。

4

1 回答 1

1
?- setof(X, flight(X, _, _), Xs).
Xs = [acompany, bcompany, ccompany, dcompany].
于 2011-04-24T10:37:36.913 回答