Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在prolog中创建列表_Prolog - Fatal编程技术网

在prolog中创建列表

在prolog中创建列表,prolog,Prolog,我有一个谓词,其格式如下:pilot(ID1,ID2)。 我正在为pilot搜索多个值,并且我能够从findall中获取该谓词,但是我如何才能从那里开始并使用该新谓词创建如下列表: [ pilot( ID1, ID2 ), pilot( ID1, ID2 ), pilot( ID1, ID2 ), pilot( ID1, ID2 ), ... ]. [澄清] 我这样做:我要求航班的ID:ID 然后这样做:findall(航班(飞行员),航班(ID,飞行员,,,,,,),Xs)。 我得到了这样的

我有一个谓词,其格式如下:
pilot(ID1,ID2)。

我正在为pilot搜索多个值,并且我能够从findall中获取该谓词,但是我如何才能从那里开始并使用该新谓词创建如下列表:

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

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

然后这样做:
findall(航班(飞行员),航班(ID,飞行员,,,,,,),Xs)。

我得到了这样的结果:

[ pilot( ID1, ID2 ), pilot( ID1, ID2 ), pilot( ID1, ID2 ), pilot( ID1, ID2 ), ... ].
Xs=
[航班(1、2)、航班(4、7)、航班(…)、…]。

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

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

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).
[飞行员(102)、飞行员(103)、飞行员(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).
[飞行员(100)、飞行员(102)、飞行员(103)、飞行员(104)]


这不正是你想要的吗?也许我不够清楚…我使用findall时是这样的:findall(航班(飞行员),flight(ID,飞行员,,,,,,,,,Xs),我问用户航班的ID。Wich给了我类似的东西:Xs=[flightS(pilots(1,4)),flightS(…),…]。我想问的是,我如何获取我已经可以访问的谓词pilots,并创建一个列表……请用澄清更新问题,如果你有一个问题,你如何从
findall(flightS(pilots),flightS中的单个
pilots
变量中获取类似
flightS(1,2)
的元素(ID,飞行员,…)
?你能展示一下你的
航班(…)
事实是什么样子的吗?例如:航班(1,飞行员(1,2),2800,飞行历史([1,2,3])。