Пример 6.15. Результат работы правила Find-data

Found data (data? blue red (6.9))

Found data (data? blue RED ())

Found data (data? blue red ()}

Found data (data? blue red ()}

Образцу, заданному в правиле, удовлетворяют четыре факта с индексами 1, 3, 4, 5. В результате активации правило выводит на экран свойства фактов, активировавших правило. Значение переменной, содержащей значение из составного поля, выводится в скобках. Кроме первого случая (факта с индексом 5), переменная содержит пустое значение. Переменную составного поля не обязательно использовать в качестве последнего ограничения. Рас­смотрим следующее правило:

Пример 6.16. Модифицированное правило Find-data

(defrule Find-data

(data?x $?y?z) =>

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

Заданному образцу удовлетворяют все факты data, но обратите внимание, каким образом связываются значения с переменной у в разных случаях:

Пример 6.17. Результат работы модифицированного правила Find-data

х=1.0 y=(blue) z=red

х=1 у=() z=blue

х=1 y=(blue) z=red

х=1 y=(blue) z=RED

х=1 y=(blue red) z=6.9

После того как произошло связывание переменной со значением, все ссыл­ки на эту переменную возвращают значение, с которым переменная была связана. Это действительно как для переменных, связанных с составными полями, так и для переменных, связанных с простыми полями. Кроме того, допустимы ссылки между образцами в одном правиле.

Пример 6.18. Правило Find-2-Coeval-Person

(defrule Find-2-Coeval-Person

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

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

=>

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

Приведенное выше правило Find-2-Coevai-person выведет на экран всевоз­можные пары имен людей (все перестановки) одинакового возраста. Как научить это правило не выводить эквивалентные по смыслу или бессмыс­ленные пары одинаковых имен (Bob-Bob), мы увидим в следующих разделах.


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



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