在序言中创建列表

Creating a List in prolog

我有一个具有以下格式的谓词:pilot( ID1, ID2 ).

我正在搜索 pilot 的多个值,我能够从 findall 中获得这个谓词,但我如何才能从那里开始并使用那个新谓词来创建这样的列表:

[ pilot( ID1, ID2 ), pilot( ID1, ID2 ), pilot( ID1, ID2 ), pilot( ID1, ID2 ), ... ].

[澄清]

我这样做:我要求航班的ID:ID

然后这样做:findall( flightS( PILOTS ), flight( ID, PILOTS, _, _, _, _), Xs).

我得到这样的结果:

Xs = [ flightS( 1, 2 ), flightS( 4, 7 ), flightS( ... ), ... ].

然后我获取该信息并找到与航班 ID 关联的结果飞行员。我可以得到每个飞行员,我可以写()他们,我的问题是,我有多个相同的飞行员,因为多次飞行,我想把所有的飞行员都具有这种结构:飞行员(ID, A,B,C,D,E),然后将它们全部放在这样的列表中:

Xa = [ pilot(ID,A,B,C,D,E), pilot(ID,A,B,C,D,E), pilot(ID,A,B,C,D,E), ... ] 这样我就可以删除重复的条目。

你的问题输入格式不清晰。 如果你对每一对飞行员都有一个谓词,这将是:

% flight(ID, PILOT)
flight(1, 100).  flight(1, 102).
flight(2, 100).  flight(2, 103).
flight(3, 102).  flight(3, 103).  flight(3, 104).

:- ID=3,                                            % flight id
   findall(pilot(PILOT), flight(ID, PILOT), Xs),    % find all solutions
   sort(Xs, UniquePilots),                          % remove duplicates
   writeln(UniquePilots).

[pilot(102), pilot(103), pilot(104)]

或者,如果您有一个谓词用于一个航班和多个飞行员,这个谓词可以:

% flight(ID, PILOTS)
flight(1, [100, 102]).
flight(2, [100, 103]).
flight(3, [102, 103, 104]).
flight(3, [100, 102]).

:- ID=3,
   findall(pilot(PILOT), (flight(ID, PILOTS), member(PILOT, PILOTS)), Xs),
   sort(Xs, UniquePilots),
   writeln(UniquePilots).

[pilot(100), pilot(102), pilot(103), pilot(104)]