Collections bagof/3给出了奇怪的结果
我在goal/prolog(prolog swi 6.0.0)中工作,我想做以下事情:我有以下信念基础: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
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
?