Могу ли я использовать переменные с assert/1?

То, что я имею сейчас, проверяет, что X(Y) не является общепринятым фактом в моей небольшой БД. Поскольку X(Y) возвращает false, он попытается утвердить это. (Я понимаю, что это создает проблемы, когда X - это правило, а не факт)

ifNotAdd(X,Y):-
    not(call(X,Y)),
    !,
    assert(X(Y)).

Например, допустим, что этот факт есть в БД

mammal(dolphin).

Я спрашиваю ifNotAdd(mammal, elephant).

Я хочу, чтобы оно увидело, что ? mammal(elephant). ложно и затем assert mammal(elephant).

Очевидно, что строка "assert(X(Y))." неверна, но чем ее заменить? Я перерыл всю документацию по prolog и форумы в поисках ответа, но пока безуспешно. Я также пытаюсь написать что-то, что сделает это самостоятельно.

EDIT. Мне нужно редактировать БД, чтобы иметь динамическую базу данных, с которой пользователь может взаимодействовать. Я создаю машину аргументов, и мне нужно позволить пользователю сообщить системе, что он "точно знает факт", чтобы система могла работать со знаниями, выходящими за пределы ее области.

В ключе http://en.wikipedia.org/wiki/Reason_maintenance

Будьте здоровы,

9
задан false 2 February 2014 в 23:16
поделиться