русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2014-11-28; просмотров: 815; Нарушение авторских прав


 

<ограничение> ::= <символьное-ограничение > |

? │

$? │

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

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

<переменная-простого-поля> ::= ?<имя-переменной>

<переменная-составного-поля> ::= $?<имя-переменной>

 

Имя переменной должно быть значением типа symbol и обязательно начи­наться с буквы. В имени переменной не разрешается использовать кавычки, т. е. строка не может использоваться как имя переменной или ее часть.

 

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

Связанные переменные могут быть использованы во внешних функциях. Символ $ имеет особое значение в левой части правил — этот оператор ото­бражает, что некоторая, возможно пустая, последовательность полей требует сопоставления. В правой части правила символ $ ставится перед перемен­ной для обозначения того, что перед использованием переменной в качест­ве аргумента функции необходимо раскрыть последовательность полей, со­держащихся в переменной. Таким образом, при использовании переменных в качестве параметров функций (как в левой, так и правой части правил) перед именем переменной, содержащей значение составного поля, не дол­жен стоять символ $ (за исключением случаев, когда требуется раскрыть последовательность полей). При использовании переменной, содержащей значение составного поля, в других случаях, перед ее именем должен стоять символ $. Нельзя применять переменную составного поля при операциях с простым полем образца шаблона или объекта.



В качестве примера введите в среду CLIPS следующее правило:

Пример 6.14. Правило Find-data

 

(defrule Find-data

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

(printout t "Found data (data ? blue " ?x " " ?y ")" crlf))

 

Выполните команды reset и run. Если правило было введено в систему без ошибок, то на экране появится следующий результат:

 

Пример 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), мы увидим в следующих разделах.

 



<== предыдущая лекция | следующая лекция ==>
Определение 6.6. Синтаксис ограничений для неупорядоченного факта | Определение 6.10. Синтаксис ограничений


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1 сек.