русс | укр

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

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

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

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


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

Определение 6.20. Синтаксис условного элемента not


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


<условный-элемент-not> ::= (not <условный-элемент>)

Условный элемент not может отрицать только одно выражение. Несколько условных элементов нужно отрицать с помощью нескольких элементов not. Тщательно следите за комбинациями not с or или and; результат не всегда очевиден!

Пример 6.30. Применение условного элемента not

 

(defrule high-flow-rate

(temp high)

(valve open)

(not (error-status confirmed))

=>



(printout t "Recommend closing of valve due to high temp" crlf))

В логическом элементе not можно использовать связанные переменные, так же как и в других условных элементах:

Пример 6.31. Правило check-value

 

(defrule check-valve

(check-status ?valve)

(not (valve-broken ?valve))

=>



(printout t "Device " ?valve " is OK" crlf))

С помощью условного элемента not можно, наконец, довести до совершен­ства наше правило Find-2-coeval-Person, последняя версия которого была приведена в разд. 6.5.1. Если вы помните, это правило выводит всевозмож­ные пары персон одинакового возраста. Чтобы данное правило не выводило эквивалентные по смыслу пары имен (например, Bob-Sue и Sue-Bob), преоб­разуем нашу программу следующим образом:

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

(deftemplate person

(slot name)

(slot age))

(deftemplate person-pair

(slot namel)

(slot name2)

(slot age))

(deffacts people

(person (name Joe) (age 20))

(person (name Bob) (age 20))

(person (name Joe) (age 34))

(person (name Sue) (age 34))

(person (name Sue) (age 20)))

(defrule Find-2-Coeval-Person

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

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

(not (person-pair (namel ?x) (name2 ?y) (age ?z)))

(not (person-pair (namel ?y) (name2 ?x) (age ?z)))

=>



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

(assert (person-pair (namel ?x) (name2 ?y) (age ?z))))

Обратите внимание на произведенные изменения. Во-первых, с помощью конструктора deftemplate был Добавлен дополнительный шаблон person-pair. В фактах, соответствующих данному шаблону, будет храниться информация об уже найденных парах ровесников. Кроме того, было сильно изменено и само правило. В его левой части было добавлено два условия:

 

(not (person-pair (namel ?x) (name2 ?y) (age ?z)))

(not (person-pair (namel ?y) (name2 ?x) (age ?z)))

Эти условные элементы проверяют наличие фактов типа person-pair и, тем самым отслеживают, была ли уже обработана данная пара или ее переста­новка. Если эти факты отсутствуют, то это означает, что обработка еще не была выполнена. В этом случае правило активируется, и выполняются дей­ствия, описанные в правой части правила. А именно выводится на экран сообщение о найденной паре ровесников и добавляется соответствующий факт person-pair, утверждающий, что данная пара уже была обработана. Для запуска программы выполните команды reset и run. Программа выве­дет на экран следующую информацию:

Пример 6.33. Результат работы правила Find-2-Coeval-Person

 

name=Sue name=Bob age=20

name=Sue name=Joe age=20

name=Sue name=Joe age=34

name=Bob name=Joe age=20

Если вы внимательно посмотрите на полученный результат и исходные данные, то обнаружите, что это именно то, что нам было нужно. Это спи­сок всевозможных ровесников без повторений и с исключением того факта, что все люди являются ровесниками сами себе. Теперь наше правило дос­тигло полного совершенства! Обратите внимание на тот факт, что если вы повторно попробуете выполнить команду run, то ничего не увидите. Это происходит потому, что в списке фактов содержится информация обо всех обработанных парах, оставшаяся после первого запуска. Для того чтобы по­вторно запускать данный пример, выполняйте команду reset перед каждой командой run.

 



<== предыдущая лекция | следующая лекция ==>
Определение 6.19. Синтаксис условного элемента and | ГЛАВА 8. Функции


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


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

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

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


 


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

 
 

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

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