Что я теперь проверял, что X (Y) не является принятым фактом в моей маленькой БД. Поскольку X (Y) возвращает false, он попытается его утвердить. (Я понимаю, что это создает проблемы, когда X является правилом, а не факт)Могу ли я использовать переменные с assert/1?
ifNotAdd(X,Y):-
not(call(X,Y)),
!,
assert(X(Y)).
Например, допустим, что этот факт в БД
mammal(dolphin).
Я прошу ifNotAdd (млекопитающее, слон).
Я хочу, чтобы это было видно? млекопитающим (слон). ложно, а затем утверждают млекопитающего (слона).
Очевидно, что «assert (X (Y))». строка неправильная, но что я могу заменить? Я травляю документацию по прологам и форумы для ответа, но пока не повезло. Я также пытаюсь написать что-то, что сделает это самостоятельно.
EDIT Мне нужно отредактировать БД, чтобы иметь динамическую базу данных, с которой пользователь может взаимодействовать. Я создаю машину аргументов, и мне нужно разрешить пользователю сообщать системе, что они «точно знают этот факт», чтобы система могла справляться со знаниями вне своего домена.
В вене http://en.wikipedia.org/wiki/Reason_maintenance
Приветствия,
Ага, я обычно использую not() только для удобства чтения при первом взломе, даже если он устарел. Должно было измениться это для должности. В любом случае, это именно то, что я искал. Я не использовал пролог, так как класс, который я узнал об этом некоторое время назад, я переучиваю. Полностью забыл '= ../2', чтобы это разрешило. Я уточню программу выше. –
о вашем редактировании: кажется, является законной причиной манипулирования db:] – m09