我有一个谓词,它在知识库中断言许多事实,以描述Wumpus游戏的网格。基本上,以下方法会生成弧形来描述所有可能的玩家过渡。
init_map :- ( cell(X-Y),
adj(X-Y, X1-Y1),
assert(arc_from_to(X-Y, X1-Y1)) ).
问题在于它会在每个断言之后打印true
,这是不好的,因为立即断言所有弧非常重要。
答案 0 :(得分:2)
也许您可以使用事实上的标准forall/2
谓词来实现生成和测试循环?
init_map :-
forall(
(cell(X-Y), adj(X-Y, X1-Y1)),
assert(arc_from_to(X-Y, X1-Y1))
).
也就是说,为什么要使用动态谓词?为什么不使用它:
arc_from_to(X-Y, X1-Y1) :-
cell(X-Y),
adj(X-Y, X1-Y1).