Определение набора объектов
Набор объектов (instance-set) — это упорядоченная коллекция объектов, определенных пользователем классов. Каждый член набора объектов (instance-set member) — объект некоторого набора классов, называемых ограничениями классов (class restrictions). Различные ограничения классов могут задаваться для каждого члена набора объектов. Ограничения вместе с переменными (instance-set member variables), с которыми будут связываться соответствующие члены набора, называются шаблоном набора (instance-set templates). Функции запросов используют шаблон для генерации самого набора объектов. В ограничении классов может быть задан модуль (см. гл. 12), где определен класс. Если модуль не задан, будут использоваться определения классов, созданных в текущем модуле.
Определение 11.30. Синтаксис шаблона набора объектов
<шаблон-набора-объектов> ::= (<члены-шаблона-наборов-объекта>)
<член-шаблона-наборов-объекта> ::=(<переменная-набора-объектов> <ограничения-классов>)
<переменная-набора-объектов> ::= <простая-переменная>
<ограничения-классов> ::= <имена-классов>
В качестве примера можно привести шаблон, выбирающий пары объектов персон противоположного пола.
Пример 11.47. Шаблон, выбирающий пары персон противоположного пола
( (?man-or-boy BOY MAN) (?woman-or-girl GIRL WOMAN))
Этот шаблон можно представить также в эквивалентной форме.
Пример 11.48. Эквивалентная форма предыдущего шаблона
( (?man-or-boy MALE) (?woman-or-girl FEMALE))
В данном примере переменные ?man-or-boy и ?woman-or-giri ограничиваются только с помощью имен классов.
Создание набора объектов
COOL использует прямой перебор для генерации наборов объектов, которые соответствуют шаблону для существующих в системе объектов по перечисленным ниже правилам:
1. Если шаблону удовлетворяет более одного набора, то элементы набора изменяются справа налево.
2. Если в ограничениях классов задано более одного класса, они перебираются слева направо.
3. Экземпляры объектов, определенные в системе, рассматриваются в порядке их создания.
Для шаблона, приведенного в предыдущем разделе, CLIPS сгенерирует 30 наборов объектов в следующем порядке:
1. [Воу-1] [Girl-1] 16. [Boy-4] [Girl-1]
2. [Воу-1] [Girl-2] 17. [Boy-4] [Girl-2]
3. [Boy-1] [Woman-1] 18. [Boy-4] [Woman-1]
4. [Boy-1] [Woman-2] 19- [Boy-4] [Woman-2]
5. [Boy-1] [Woman-3] 20. [Boy-4] [Woman-3]
6. [Boy-2] [Girl-1] 21. [Man-1] [Girl-1]
7. [Boy-2] [Girl-2] 22. [Man-1] [Girl-2]
8. [Boy-2] [Woman-1] 23. [Man-1] [Woman-1]
9. [Boy-2] [Woman-2] 24. [Man-1] [Woman-2]
10. [Boy-2] [Woman-3] 25. [Man-1] [Woman-3]
11. [Boy-3] [Girl-1] 26. [Man-2] [Girl-1]
12. [Boy-3] [Girl-2] 27. [Man-2] [Girl-2]
13. [Boy-3] [Woman-1] 28. [Man-2] [Woman-1]
14. [Boy-3] [Woman-2] 29. [Man-2] [Woman-2]
15. [Boy-3] [Woman-3] 30. [Man-2] [Woman-3]
Дата добавления: 2021-12-14; просмотров: 276;