русс | укр

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

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

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

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


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

Вычисление цели. Механизм возврата


Дата добавления: 2013-12-23; просмотров: 927; Нарушение авторских прав


Правила унификации

1. Если x и y-константы, то они унифицируемы, только если они равны.

2. Если x- константа или функция, а Y-переменная, то они унифицируемы, при этом Y принимает значение x .

3. Если x и y -функции, то они унифицируемы тогда и только тогда, когда у них одинаковые имена функций (функторы) и набор аргументов и каждая пара аргументов функций унифицируемы.

Есть особый предикат «=», который используется в Прологе для отождествления двух термов. Использование оператора «=» поможет лучше понять процесс означивания переменной. В Прологе оператор «=» интерпретируется как оператор присваивания или как оператор проверки на равенство в зависимости от того, являются ли значения термов свободными или связанными.

Пример 20: X=Y, если X и Y – связанные переменные, то производится проверка на равенство, например: если X=5 и Y=5, то результат ДА (истина); если X=6 а Y=5, то результат НЕТ(ложь). Если одна из переменных X или Y – свободная, то ей будет присвоено значение другой переменной, для Турбо-Пролога несущественно слева или справа от знака «=» стоит связанная переменная.

Оператор «=» ведет себя точно так, как внутренние подпрограммы унификации при сопоставлении целей или подцелей с фактами и правилами программы.

Каноническая форма цели (вопроса) является конъюнкцией атомарных предикатов, то есть последовательностью подцелей, разделенных запятыми:

Q=Q1, Q2,…, Qn.

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



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

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

Замечание: единственным способом освободить переменную, связанную в предложении является откат при поиске с возвратом.

Алгоритм вычисления цели – частный случай правила резолюции применительно к дизъюнктам Хорна. Вопрос Q является правилом без заголовка, аналогом выражения ШQ. Пусть D – база данных (множество дизъюнктов). На вопрос Q, следует найти такую подстановку s, для которой множество s[DИ(ШQ)] невыполнимо. Стратегия выбора очередной пары дизъюнктов для резолюции здесь очень проста: подцели и предложения просматриваются в текстуальном порядке.

Пример 21: пусть есть БД семья:

1. мать( мария, анна).

2. мать(мария, юлия).

3. мать( анна, петр).

4. отец( иван, анна).

5. отец( иван, юлия).

6. дед (X, Y): - отец(X, Z), мать(Z, Y).

7. дед (X, Y): - отец(X, Z), отец(Z, Y).

8. бабка (X, Y): - мать(X, Z), мать(Z, Y).

9. бабка (X, Y): - мать(X, Z), отец(Z, Y).

Зададим сложную цель:

Q1, Q2 = отец(X, Y), мать(мария, Y).

Подцель Q1= отец(X,Y) соответствует четвертому предложению БД :отец (иван,анна). Это дает подстановку
s1={X=иван,Y=анна}. Затем найденная подстановка применяется к s1[Q2]= мать(мария, анна). Этой подцели соответствует 1 предложение БД, что дает пустую подцель по правилу резолюции, следовательно ответ найден: X= иван, Y= анна.

Для получения нового ответа в БД ищется новая унификация для s1[Q2]. Так как в БД нет соответствующего предложения, то вычисления прекращаются, система вновь рассматривает последовательность Q1, Q2 и для Q1 ищется новая унификация в БД, начиная с пятого предложения. Это и есть возврат. Пятое предложение сразу же дает желаемую унификацию с подстановкой s2={X=иван,Y=юлия}. Вновь найденная подстановка применяется к s1[Q2]= мать(мария, юлия). Этой подцели соответствует второе предложение БД. Далее указанная процедура повторяется и в итоге имеем:

Цель: отец(X, Y), мать(мария, Y).

2 решения: X=иван, Y=анна

X=иван, Y=юлия.



<== предыдущая лекция | следующая лекция ==>
Унификация в Прологе | Управление поиском решения


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


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

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

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


 


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

 
 

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

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