Collections bagof/3给出了奇怪的结果

Collections bagof/3给出了奇怪的结果,collections,prolog,logic,swi-prolog,Collections,Prolog,Logic,Swi Prolog,我在goal/prolog(prolog swi 6.0.0)中工作,我想做以下事情:我有以下信念基础: elevator([agent0,0,[]]) elevator([agent1,0,[]]) elevator([agent2,0,[]]) 然后执行以下查询: if bel(bagof(Elevator,elevator(Elevator),Elevators)) then insert (elevatorList(Elevators)). 然而,电梯的预期结果是 [[agent1

我在goal/prolog(prolog swi 6.0.0)中工作,我想做以下事情:我有以下信念基础:

elevator([agent0,0,[]])
elevator([agent1,0,[]])
elevator([agent2,0,[]])
然后执行以下查询:

if bel(bagof(Elevator,elevator(Elevator),Elevators)) then insert (elevatorList(Elevators)). 
然而,电梯的预期结果是

[[agent1,0,[]],[agent2,0,[]],[agent3,0,[]]]
结果列表是

[Elevator/['.'(Agent0, '.'(0, '.'([], [])))]] [Elevator/['.'(Agent0, '.'(0, '.'([], []))),'.'(bidAgent, '.'(0, '.'([], [])))]] [Elevator/['.'(Agent0, '.'(0, '.'([], []))),'.'(bidAgent, '.'(0, '.'([], []))),'.'(agent1, '.'(0, '.'([], [])))]] 

你知道我做错了什么吗?

似乎一切都很好:你用一种非常特殊的形式写替换。您编写的不是
lifter=Term
,而是
lifter/Term
。接下来,您可能会使用
write_canonical/1
而不是
writeq/1
。我确实看到了一个问题,首先,bagof多次而不是一次创建包含相同评估的列表,那么(意思是在列表中?第三,为什么列表中包含电梯/有什么方法可以消除它?在写入输出时,您需要显示更多代码。如果是bel(bagof(电梯,电梯(电梯),电梯)),则插入(电梯列表(电梯)).之后我直接检查信任基础。您在Prolog中使用
if…then