在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])。