?- отвратительная.
no
?- assert( солнечно).
yes
?- необычная.
yes
?- retract( дождь).
уes
?- хорошая.
yes
Добавлять и удалять можно предложения любой формы. Следующий пример показывает, что, кроме того, retract может работать недетерминировано: используя механизм возвратов с помощью только одной цели retract можно удалить целое множество предложений. Предположим, что в программе, с которой мы 'консультируемся', есть такие факты:
быстр( энн).
медл( том).
медл( пат).
К этой программе можно добавить правило:
?- assert(
( быстрее( X, Y) :-
быстр( X), медл( Y) ) ).
yes
?- быстрее( А, В).
А = энн
В = том
?- retract( медл( X) ).
Х = том;
X = пат;
nо
?- быстрее( энн, _ ).
nо
Заметьте, что при добавлении нового правила синтаксис требует, чтобы оно (как аргумент assert) было заключено в скобки.
При добавлении нового предложения может возникнуть желание указать, на какое место в
базе
данных его следует поместить. Такую возможность обеспечивают предикаты
asserta
и
assertz
. Цель
asserta( С)
помещает С в начале базы данных. Цель
assertz( С)
- в конце. Вот пример, иллюстрирующий работу этих предикатов:
?- assеrt( р( a)), assertz( р( b) ), asserta( p( c) ).
yes
?- p( X).
Х = с;
Х = а;
Х = b
Между consult и assertz существует связь. Обращение к файлу при помощи consult можно в терминах assertz определить так: считать все термы (предложения) файла и добавить их в конец базы данных.