Пример 5.11. Удаление всех фактов

(retract *)

После выполнения данной команды список фактов будет очищен пол­ностью и окно отображения текущего состояния списка фактов станет идентично изображенному на рис. 5.13.

Необходимо заметить, что функция retract не оказывает никакого воздей­ствия на индекс следующих добавленных фактов, т. е. этот индекс не обну­ляется. Если после удаления всех введенных фактов добавить в систему ка­кой-нибудь факт, то он получит индекс f-б, несмотря на то, что список фактов в данный момент пуст.

5.2.5. Функция modify

Используя функции assert и retract, можно выполнять большинство необ­ходимых для функционирования правил действий. В том числе и изменения существующего факта. Например, если в список фактов ранее был добавлен факт (temperature is low), который получил индекс 0, то изменить его зна­чение можно, например, следующим образом:

Пример 5.12. Изменение существующего факта

(clear)

(assert (temperature is low))

(retract 0)

(assert (temperature is high))

Для изменения упорядоченных фактов доступен только этот способ. Для упрощения операции изменения неупорядоченных фактов CLIPS предос­тавляет функцию modify, которая позволяет изменять значения слотов таких фактов. Modify просто упрощает процесс изменения факта, но ее внутрен­няя реализация эквивалентна вызовам пар функций retract и assert. За один вызов modify позволяет изменять только один факт. В случае удачного выполнения функция возвращает новый индекс модифицированного факта. Если в процессе выполнения произошла какая-либо ошибка, то пользовате­лю выводится соответствующее предупреждение и функция возвращает зна­чение FALSE.

Определение 5.7. Синтаксис команды modify

(modify <определение-факта>

<новое-значение-слота>+)

Аргументом <определение-факта> может быть либо переменная, связанная с адресом факта с помощью правила, либо индекс факта без префикса (на­пример, 3 для факта с индексом f-3). После определения факта следует список из одного или более новых значений слотов указанного шаблона. Для использования приведенного выше примера его необходимо переделать следующим образом:


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: