0

私はプロローグが初めてです。以下に基本的なコードを書きました。

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).

やりたいことは2つ。最初に次のようにクエリすると

?- search(X, paris,7).

プロローグが最初に見せてくれるのは

X = [acompany]

しかし、最初のクエリでリスト内のすべての要素を表示したい。

すなわち

X = [acompany, bcompany, ccompany, dcompany]

もう 1 つは、リスト内の要素が重複しないようにすることです。

例えば;

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

私はそのような最後のリストを望んでいません。

これら2つのことをどのように修正できますか?ありがとう。

4

1 に答える 1

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