Как утверждать сразу много фактов в базе знаний?

#prolog

#пролог

Вопрос:

У меня есть предикат, который вводит много фактов в базу знаний для описания сетки для игры Wumpus. В принципе, следующий метод генерирует дуги для описания всех возможных переходов игроков.

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

Проблема в том, что он печатает true после каждого утверждения, что не очень хорошо, поскольку важно утверждать все дуги мгновенно.

Ответ №1:

Может быть, вы можете использовать стандартный 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).
  

Комментарии:

1. Вау, это будет работать так же, как куча динамических?