如何一次将许多事实断言成知识库?

时间:2019-03-10 15:34:36

标签: prolog

我有一个谓词,它在知识库中断言许多事实,以描述Wumpus游戏的网格。基本上,以下方法会生成弧形来描述所有可能的玩家过渡。

init_map :- ( cell(X-Y),
              adj(X-Y, X1-Y1),
              assert(arc_from_to(X-Y, X1-Y1)) ).

问题在于它会在每个断言之后打印true,这是不好的,因为立即断言所有弧非常重要。

1 个答案:

答案 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).