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


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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



(retrасt <определение-факта>+ \ *)

Аргумент <определение-факта> может являться либо переменной, связанной с адресом факта с помощью правила (эта возможность будет описана в сле­дующей главе), либо индексом факта без префикса (например, 3 для факта с индексом f-3), либо выражением, вычисляющим этот индекс (например, (+ 1 2) для факта с индексом f-3). Если в качестве аргумента функции retract использовался символ *, то из текущей базы знаний системы будут удалены все факты. Функция retract не имеет возвращаемого значения.

Пример 2.2.6. Добавление фактов

 (assert (а) (b) (с) (d) (e) (f))

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

 (retract 0 (+ 0 2) (+022))

Эта команда удалит все факты с четными индексами, используя индекс факта непосредственно (первый аргумент) и выражение, которое вычисляет индекс факта (второй и третий аргумент).

Рис. 2.2.5. Результат добавления и удаления фактов

В случае, если факт с указанным индексом не будет найден, CLIPS выдаст соответствующее сообщение об ошибке.

Выполните команду:

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

(retract *)

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

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

Функция modify

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

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

(clear)

(assert (temperature is low))

(retract 0)

(assert (temperature is high))

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

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

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

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

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

Пример 2.2.10. Изменение существующего неупорядоченного факта

 (deftemplate temperature (slot value))

(assert (temperature (value low)))

(modify 0 (value high))

Рис. 2.2.6. Результат изменения существующего неупорядоченного факта

Обратите внимание на движение фактов в базе знаний CLIPS при выполнении функции modify — сначала удаляется старый факт с индексом f-o, a затем добавляется новый факт с индексом f-1, идентичный предыдущему, но с новым значением заданного слота.

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

Функция duplicate

Помимо функции modify, в CLIPS существует еще одна очень полезная функция, упрощающая работу с фактами, — функция duplicate. Эта функция создает новый неупорядоченный факт заданного шаблона и копирует в него определенную пользователем группу полей уже существующего факта того же шаблона. По действиям, которые выполняет функция duplicate, аналогична modify, за исключением того, что она не удаляет старый факт из списка фактов. Одним вызовом функции duplicate можно создать одну ко­пию некоторого заданного факта. Как и функция modify, duplicate, в случае удачного выполнения, возвращает индекс нового факта, а в случае неуда­чи — значение false.



Поделиться:


Последнее изменение этой страницы: 2021-03-10; просмотров: 71; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.133.159.224 (0.005 с.)