Запрос в прологе - PullRequest
       2

Запрос в прологе

1 голос
/ 15 февраля 2011

Я знаю о том, что мы можем добавлять факты динамически во время выполнения, значит

fact1(+First,+Second).

Я могу вставить, используя asserta.Но я хочу спросить, могу ли я добавить функтор во время выполнения, то есть изначально есть только один факт, такой как fact1(first,second)., но пользователь вставит еще несколько фактов во время выполнения, скажем

fact2(first,second).
fact3(first,second).

Здесь изначально мы не знаем, сколько фактов нужно добавить.Скажем, пользователь будет вводить как 3, тогда мы должны добавить fact1, fact2 и fact3.Если пользователь вводит как 4, то мы должны добавить четыре факта, т.е. факт1, факт2, факт3 и факт4.

Любые предложения в этом направлении приветствуются.Спасибо.

1 Ответ

3 голосов
/ 15 февраля 2011

Вы можете создать факт для утверждения, используя предикаты atom_concat / 3 и = .. / 2. Далее приведен пример, который использует их для утверждения предиката по мере необходимости (базовое имя, число и два аргумента):

assert_predicate(Name, N, Parm1, Parm2):-
  atom_concat(Name, N, FactName),
  Fact=..[FactName, Parm1, Parm2],
  asserta(Fact).

и вы бы использовали его с чем-то вроде: assert_predicate (факт, 1, первый, второй)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...