Предикатные ограничения
Иногда необходимо ограничить поле, основываясь на истинности некоторого логического выражения. CLIPS позволяет использовать предикатные ограничения. Предикатные ограничения позволяют вызывать предикатные функции (функции, которые возвращают значение false при не соответствии условиям и не-FALSE, если значение удовлетворяет условиям) в течение процесса сопоставления образцов. Если предикатная функция возвращает значение не-false, ограничение удовлетворяется. Если предикатная функция возвращает значение false, то ограничение не удовлетворяется. Предикатные ограничения записываются с помощью двоеточия и следующего за ним вызова соответствующей предикатной функции. Обычно предикатные ограничения используются совместно со связывающими ограничениями и при связывании переменных (т. е. если вы имеете переменную, которую нужно связать с некоторым полем и хотите одновременно ее протестировать, объедините ее с предикатным ограничением).
Предикатные ограничения имеют следующий синтаксис:
Определение 6.11. Синтаксис предикатного ограничения
:<вызов-функции>
Таким образом, определение понятия "элемент", приведенное в предыдущем разделе, можно расширить следующим образом:
Определение 6.12. Синтаксис понятия "элемент"
<элемент> ::= <константа>│
<простая-переменная>|
<составная-переменная>|
:<вызов-функции>
CLIPS предоставляет несколько готовых предикатных функций (см. гл. 15). Кроме этого, пользователь также может создавать свои собственные предикатные функции.
Пример 6.20. Еще один вариант правила Find-data
(defrule Find-data
(data ?x&: (floatp ?x)&:{> ?x 0) $?y ?z&:(stringp ?z) )
=>
(printout t "x=" ?x " y=" ?y " z=" ?z crlf ) )
Выше приведен еще один вариант правила Find-data. В данном случае ищется факт неявно созданного шаблона data, первое поле которого — вещественное число больше нуля, а последнее — строка. В нашем списке фактов такому правилу удовлетворяет только факт с индексом 1 —
(data 1.0 blue "red") .
Ограничения, возвращающие значения
В ограничениях возможно использование значений, возвращенных некоторыми функциями (в том числе и внешними). Вызов функции записывается с помощью знака = и указанной за ним функцией.
Замечание
Функция сравнения также использует знак =. Разница между ними может быть определена по контексту.
Возвращаемое значение должно быть одним из простых типов данных CLIPS. Это значение, возвращенное функцией, объединяется с образцом так, как если бы оно было символьным ограничением. Заметьте, что функция вычисляется при каждом сопоставлении образцов, а не один раз при определении правила.
Ограничения, возвращающие значения, имеют следующий синтаксис:
Дата добавления: 2021-12-14; просмотров: 341;