Пример 11.52. Действия над набором объектов
(do-for- all-instances
((?man-or-boy MALE) (?woman-or-girl FEMALE))
(= ?man-or-boy:age ?woman-or-girl:age)
(printout t "(" ?man-or-boy "," ?woman-or-girl ")" crlf))
В данном примере:
Ø do-for-all-instances — одна из функций CLIPS, работающая с наборами объектов (функции будут рассмотрены ниже);
Ø ( (?man-or-boy MALE) (?woman-or-girl FEMALE)) — шаблон, определяющий набор из пар объектов противоположного пола;
Ø (= ?man-or-boy:age ?wornan-or-girl :age) — запрос, отбирающий только пары одного возраста;
Ø (printout t "(" ?man-or-boy "," ?woman-or-girl ")" crlf) — действия, выводящие пары найденного набора на экран.
Результат выполнения данного выражения представлен на рис. 11.31.
Рис. 11.31.Результат выполнения функции do-for-all-instances над заданным набором
Функции-запросы
CLIPS предоставляет 6 функций (табл. 11.2), способных оперировать с наборами объектов. Эти функции называются функциями-запросами наборов объектов.
Таблица 11.2. Функции для операций над наборами объектов
______________________________________________________________________________________________
Функция Назначение
______________________________________________________________________________________________
any-instancep Определяет, удовлетворяет ли запросу один или более наборов объектов
find-instance Возвращает первый объект из набора удовлетворяющему
запросу
find-all-instance Группирует и возвращает все наборы объектов,
удовлетворяющих запросу
do-for-instance Выполняет действия для первого набора объектов,
удовлетворяющих запросу
do-fo-all-instance Выполняет действия для каждого набора объектов,
удовлетворяющих запросу
delayed-do-for-all-instance Группирует все наборы объектов, удовлетворяющие запросу, и выполняет действия над этой группой
____________________________________________________________________________________
Функция запроса набора объектов может быть вызвана в произвольном месте, где вызывается обычная функция CLIPS. Если при выполнении любой из этих функций происходит ошибка, функция тут же прерывается и возвращает значение false.
Пользователь имеет возможность прерывать выполнение некоторых из указанных функций и возвращать при этом какой-то результат. Для этого служат функции break и return, которые можно использовать внутри функций do-for-instance, do-for-all-instance и delayed-do-for-all-instances. Функция break фактически прерывает выполнение запроса, а функция return помогает вернуть некоторое значение.
Функция any-instancep выполняет проверку удовлетворения запроса каким-либо набором объектов. Она применяет запрос к каждому набору объектов, который соответствует шаблону. Если набор объектов удовлетворяет запросу, то функция немедленно прекращается и возвращает значение TRUE. В противном случае — FALSE.
Дата добавления: 2021-12-14; просмотров: 274;