Определение 6.10. Синтаксис ограничений

<ограничение>::=? │

$? │

<связанное-ограничение>

<связанное-ограничение>::= <простое-ограничение> │

<простое-ограничение>&<связанное-ограничение>|

<простое-ограничение>|<связанное-ограничение>|

<простое-ограничение>::= <элемент>| ~ <элемент>

<элемент>::= <константа>│

<простая-переменная>|

<составная-переменная>

Ограничение & обычно служит только для объединения с другими ограни­чениями или связывания переменных. Заметьте, что связывающие ограничения могут использовать связанные переменные и в то же время сами про­изводить связывание переменной со значением некоторого поля. Если имя переменной встретилось в первый раз, то для ограничения будут использо­ваться остальные члены условного элемента, а переменная будет связана с соответствующим значением поля. Если переменная уже была связана, то ее значение работает как дополнительное ограничение для данного поля.

В качестве примера приведем улучшенный вариант правила Find-2-coevai-Person из предыдущего раздела.

Пример 6.19. Улучшенное правило Find-2-Coeval-Person

(defrule Find-2-Coeval-Person

(person (name?x) (age?z))

(person (name?y&~?x) (age &z))

=>

(printout t "name="?x " name="?y " age="?z crlf))

Ограничение?y&~?x запрещает выводить бессмысленные пары одинаковых имен (Bob-Bob). Однако данное правило все еще выводит эквивалентные по смыслу пары имен (например, Bob-Sue и Sue-Bob). Дальнейшее совершенствование правила продолжится в разд. 6.5.5.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: