Пример 5.13. Изменение существующего неупорядоченного факта
(deftemplate temperature (slot value) )
(assert (temperature (value low)) )
(modify 0 (value high) )
Если включить режим просмотра изменения списка фактов (как было описано в разд. 5.2.2) и выполнить приведенные выше команды, то полученный результат должен соответствовать рис. 5.15.
Рис. 5.15.Результат изменения существующего неупорядоченного факта
Обратите внимание на движение фактов в базе знаний CLIPS при выполнении функции modify — сначала удаляется старый факт с индексом f-o, a затем добавляется новый факт с индексом f-1, идентичный предыдущему, но с новым значением заданного слота.
Если в шаблоне заданного факта отсутствует слот, значение которого требуется изменить, CLIPS выведет соответствующее сообщение об ошибке. Если заданный факт отсутствует в списке фактов, пользователь также получит соответствующее предупреждение.
5.2.6. Функция duplicate
Помимо функции modify, в CLIPS существует еще одна очень полезная функция, упрощающая работу с фактами, — функция duplicate. Эта функция создает новый неупорядоченный факт заданного шаблона и копирует в него определенную пользователем группу полей уже существующего факта того же шаблона. По действиям, которые выполняет функция duplicate, аналогична modify, за исключением того, что она не удаляет старый факт из списка фактов. Одним вызовом функции duplicate можно создать одну копию некоторого заданного факта. Как и функция modify, duplicate, в случае удачного выполнения, возвращает индекс нового факта, а в случае неудачи — значение false.
Определение 5.8. Синтаксис команды duplicate
(duplicate <определение-факта>
<новое-значение-слота>+)
Аргумент <определение-факта> может быть либо переменной, связанной с адресом факта с помощью правила, либо индексом факта без префикса. После определения факта следует список из одного или более новых значений слотов указанного шаблона. Продемонстрируем работу данной функции на следующем примере:
Дата добавления: 2021-12-14; просмотров: 289;