Запрос — это определенное пользователем логическое выражение, применяемое к набору объектов для установления дополнительных ограничений для членов набора. Если значение логического выражения не равняется false, то считается, что набор объектов удовлетворяет запросу.
Определение 11.31. Синтаксис запроса
<запрос>::=(<логическое-выражение>)
Предположим, что необходимо найти пары противоположного пола одного возраста. Для этого следует использовать запрос, представленный в примере 11.50.
Пример 11.50. Запрос, накладывающий ограничение на возраст
(= (send?man-or-boy get-age) (send?woman-or-girl get-age))
В запросе можно обращаться к слотам членов набора объекта напрямую при помощи краткой нотации, скрывающей использование сообщений.
Определение 11.32. Синтаксис обращения к переменным
<переменная-набора-объектов>:<имя-слота>
С учетом сказанного, предыдущий пример может быть переписан так, как представлено в примере 11.51.
Пример 11.51. Измененный запрос, накладывающий ограничение на возраст
(=?man-or-boy:age?woman-or-girl:age)
Определение действий
Некоторые функции позволяют пользователю определить действие, которое будет выполнено для каждого набора объектов. В отличие от запросов действия должны использовать сообщения для чтения значений слотов. В случае если над объектом требуется выполнить несколько операций, используется функция prong (см. гл. 15) для их группировки.
Определение 11.33. Синтаксис определения действия
<действие>::= <функция>
Обобщая приведенные выше примеры, в качестве иллюстрации использования действий над набором объектов воспользуемся выражением из примера 11.52.