Замечание. Функция сравнения также использует знак =

Функция сравнения также использует знак =. Разница между ними может быть определена по контексту.

Возвращаемое значение должно быть одним из простых типов данных CLIPS. Это значение, возвращенное функцией, объединяется с образцом так, как если бы оно было символьным ограничением. Заметьте, что функ­ция вычисляется при каждом сопоставлении образцов, а не один раз при определении правила.

Ограничения, возвращающие значения, имеют следующий синтаксис:

Определение 6.13. Синтаксис ограничения, возвращающего значение

=<вызов-функции>

Определения понятия "элемент", приведенные в предыдущем разделе, при­мут такой вид:

Определение 6.14. Синтаксис понятия "элемент"

<элемент>::= <константа>│

<простая-переменная>|

<составная-переменная>|

:<вызов-функции>

=<вызов-функции>

Правило из примера 6.21 выводит на экран такие факты data, в которых значение второго поля в два раза больше, чем значение первого. В нашем случае это факты (data 1 2) И (data 2 4).

Пример 6.21. Использование ограничения, возвращающего значение

(assert (data I 2)

(data 2 3)

(data 24))

(defrule Find-data

(data?x?y&=(* 2?x))

=>

(printout t "x="?x " y="?y crlf))

Сопоставление образцов с объектами

Во всех приведенных выше примерах образцы сопоставлялись с фактами из списка фактов. Кроме этого, образцы можно сопоставлять с экземплярами объектов — экземпляров, определенных пользователем классов на языке COOL (см. гл. 11). Такие образцы называются образцами объектов. Образцы могут сопоставляться с объектами, спецификация которых определена до создания образца и которые находятся в границах видимости текущего мо­дуля. Любой класс, который имеет объекты, соответствующие образцу, не может быть удален или изменен, пока не будет удален образец. Даже если правило удалено с помощью действий, выполняемых в собственной правой части, класс, связанный с образцом, не может быть изменен до тех пор, по­ка правая часть правила не закончит работу.

При создании или удалении объекта все образцы, подходящие этому объек­ту, обновляются. Однако в случае изменения слота объекта обновляются только те образцы, которые явно сопоставляются по этому слоту. Таким образцом можно использовать логические зависимости для обработки изме­нений некоторых слотов.

Изменение неактивных слотов или объектов неактивных классов не оказы­вает никакого воздействия на правила.


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



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