Предикатные ограничения


 

Иногда необходимо ограничить поле, основываясь на истинности некоторо­го логического выражения. 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; просмотров: 273;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.007 сек.