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

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

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

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

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

(deftemplate car

(slot name)

(slot producer)

(slot type)

(slot max-speed))

(assert (car

(name scorpio)

(producer ford)

(type sedan)

(max-speed 180)))

(duplicate 0

(type off-road)

(max-speed 130))

В приведенном примере определяется шаблон, описывающий свойства ав­томобиля, и добавляется факт — автомобиль Ford Scorpio с типом кузова седан и максимальной скоростью 180 (км/ч). После этого с помощью функ­ции duplicate добавляется факт с информацией об еще одном автомобиле с похожими характеристиками — это внедорожник Ford Scorpio с макси­мальной скоростью 130 (км/ч). Duplicate просто облегчает нам жизнь, из­бавляя от излишнего ввода значений данных совпадающих слотов.

В случае, если добавляемый с помощью duplicate факт уже присутствует в списке фактов, будет выдана соответствующая информация об ошибке и возвращено значение false. Факт при этом добавлен не будет. Это поведе­ние можно изменить, разрешив существование одинаковых фактов в базе знаний. Как это сделать, было описано в разд. 5.2.3.

5.2.7. Функция assert-string

Кроме функции assert, CLIPS предоставляет еще одну функцию, полезную при добавлении фактов, — assert-string. Эта функция принимает в качест­ве единственного аргумента символьную строку, являющуюся текстовым представлением факта (в том виде, в котором вы набираете его, например, в функции assert), и добавляет его в список фактов. Функция assert-string может работать как с упорядоченными, так и с неупорядоченными фактами. Одним вызовом функции assert-string можно добавить только один факт.


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



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