- •Правила выполнения и оформления контрольной работы
- •Представление знаний
- •Задание 1
- •1. Логическая модель представления знаний
- •Декларативная и процедурная семантика языка Пролог
- •Типы данных Пролог
- •1.3. Раздел предложений
- •Организация запросов на языке Пролог
- •Варианты задания 2
- •Разветвления на языке Пролог
- •Правила логического вывода
- •Правило логического вывода на языке Пролог
- •Варианты задания 3
- •Варианты задания 4
- •2. Представление знаний правилами продукций
- •Примеры выполнения заданий
- •Задание 5
- •Задание 6
- •3. Семантические сети
- •Задание 7
- •4. Фреймы
- •Задание 8
- •Содержание
Разветвления на языке Пролог
Язык Пролог не содержит инструкций, аналогичных инструкциям разветвления и повторения в процедурных языках. Реализация этих процессов происходит в соответствии с правилами логического вывода. Поэтому для программирования нескольких реализаций одного и того же предиката следует построить столько же правил, сколько ветвей у разветвления. При этом у всех ветвей головой правил служит изучаемый предикат.
предикат if <первая ветвь разветвления>.
предикат if <вторая ветвь разветвления>.
предикат if <последняя ветвь разветвления>.
Пример. Рассмотрим программу определения типа образовательного учреждения, которое посещает ребенок, в зависимости от его возраста.
Domains
X,Y=symbol.
Predicates
ввод(Х).
вывод(Х) .
посещает(Х,Х).
ответ.
Clauses
ввод(Х) if write("введите возраст ребенка"), readint(X), nl.
вывод(Y) if write("ребенок посещает"), write(Y).
посещает(Х,Y) if Х<3, Y="ясли".
посещает(X,Y) if Х>=3, X<=6, Y="дет. сад".
посещает(Х,Y) if Х>6, Y="школа".
ответ if ввод(Х), посещает(X,Y), вывод(Y).
Goal
ответ.
Правила логического вывода
Понятие об унификации и конкретизации
Унификацией называется отождествление объектов Пролога при сопоставлении предиката с фактами и правилами базы данных. Если такое отождествление выполнено, то говорят, что унификация завершена успешно. При таком сопоставлении свободные переменные доказываемого предиката приобретают конкретные значения. Этот процесс называется конкретизацией.
Пример. Пусть имеется база данных:
пишет("Петров",портреты).
пишет("Репин",картины).
пишет("Суриков",картины).
пишет("Блок",стихи).
пишет("Аксенов",романы).
художник(X) if пишет(X,портреты).
художник(X) if пишет(X,картины).
писатель(X) if пишет(X,стихи).
писатель(X) if пишет(X,романы).
Сделаем запрос: «Кто является писателем?»:
писатель(X).
Предикат писатель (X) сопоставляется с фактами базы знаний, после чего сопоставляется с головой правила писатель (X). Поскольку сопоставление успешно, то переменная X конкретизируется значением "Блок". Выполняется доказательство цели писатель ("Блок"). Для доказательства изучается первый предикат правой части правила пишет ("Блок", стихи). Этот предикат сопоставляется с фактом базы данных. При сопоставлении с фактом пишет ("Блок", стихи) унификация завершается успешно, т. е. предикат пишет("Блок", стихи) принимает значение «истина», голова правила писатель ("Блок") принимает значение «истина». При этом переменная X конкретизируется значением "Блок". В конце работы программы на экране выдается сообщение Х="Блок", Х="Аксенов".
Правило логического вывода на языке Пролог
Результат логического вывода зависит от вида вопроса. Если вопрос не содержит переменных, а только константы, то такой вопрос называется общим и ответ на него будет «да» или «нет» в зависимости от результатов сопоставления с фактами и правилами программы. Если же вопрос содержит переменные, то в процессе сопоставления переменные будут конкретизированы, и полученные значения будут выведены на экран, в противном случае ответ будет «нет». Процесс доказательства правила
<предикат> if <предикат1>, <предикат2>, ..., <предикатn>
можно описать следующим образом.
Выполняется сопоставление предиката предикат1 с фактами и правилами базы данных. Если сопоставление невозможно, то голова правила — предикат — получает значение «ложь». Если нашелся вариант сопоставления, при котором предикат1 получает значение «истина», то выполняется переход к доказательству предиката предикат2.
Выполняется доказательство предиката предикат2 с теми параметрами, при которых был истинен предикат1. Если это возможно, то переход к доказательству предиката предикат3. Если невозможно, то происходит одна из основных операций Пролога — откат, т. е. возврат к предикат1 и поиску других значений параметров предиката предикат1, при которых он будет истинен. Если таковые найдутся, то выполняется возврат к предикат2 и производится попытка его доказательства для новых, альтернативных значений параметров предиката предикат1. Этот процесс выполняется до тех пор, пока не будут просмотрены все варианты доказательства второго предиката. Если при всех возможных вариантах первого предиката второй принимает значение «ложь», то задача считается решенной и голова правила получает значение «ложь». Если найдется вариант сопоставления, при котором и первый, и второй предикаты получают значение «истина», то происходит переход к доказательству предиката предикат3 и т. д.
Пример задачи на упорядочение объектов. Рыбак поймал окуня, ерша и щуку. Щуку он поймал раньше окуня, ерша позже щуки, но раньше окуня. Какая рыба поймана раньше всех?
Clauses
раньше(щука,окунь).
раньше(щука,ерш).
раньше(ерш,окунь).
порядок(X,Y,Z) if раньше(X,Y), раньше(Y,Z).
Goal
порядок(X,Y,Z).
