Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Prolog.doc
Скачиваний:
13
Добавлен:
06.09.2019
Размер:
310.78 Кб
Скачать

8.6. Правила логического вывода

8.6.1. Понятие об унификации и конкретизации

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

Пример

8.4. Пусть имеется база знаний:

пишет("Петров",портреты).

пишет("Репин",картины).

пишет("Суриков",картины).

пишет("Блок",стихи).

пишет("Аксенов",романы).

художник(X)if пишет(Х,портреты).

художник(X)if пишет(Х,картины).

писатель(X)if пишет(Х,стихи).

писатель(X)if пишет(Х,романы).

Сделаем запрос: «Кто является писателем?»:

писатель(X).

Предикат писатель(X) сопоставляется с фактами базы знаний, после чего сопоставляется с головой правила писатель(Х). Поскольку сопоставление успешно, то переменная Х конкретизируется значением "Блок". Выполняется доказательство цели писатель (“Блок”). Для доказательства изучается первый предикат правой части правила пишет (“Блок”,стихи). Этот предикат сопоставляется с фактом базы данных. При сопоставлении с фактом пишет (“Блок”,стихи), унификация завершается успешно, то есть предикат пишет(“Блок”,стихи) принимает значение "истина", голова правила писатель(“Блок”) принимает значение "истина". При этом Х конкретизируется значением "Блок" на экране выдается сообщение "!да!".

8.6.2. Правило логического вывода на prolog

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

предикат if предикат1,предикат2,… предикатn

можно описать следующим образом:

  1. Выполняется сопоставление предикат1 с фактами и правилами базы данных. Если сопоставление невозможно, то голова правила  предикат  получает значение «ложь». Если нашелся вариант сопоставления, при котором предикат1 = истине, то переход к доказательству предикат2.

  2. Выполняется доказательство предикат2 с теми параметрами, при которых был истинен предикат1. Если это возможно, то переход к доказательству предикат3. Если невозможно, то происходит одна из основных операций PROLOG  откат, то есть возврат к предикат1 и поиску других значений параметров предикат1, при которых он будет истинен. Если таковые найдутся, то выполняется возврат к предикат2 и производится попытка его доказательства для новых, альтернативных значений параметров предикат1. Этот процесс выполняется до тех пор, пока не будут просмотрены все варианты доказательства предикат2. Если при всех возможных вариантах предикат1 второй предикат принимает значение ложь, то задача считается решенной и голова правила получает значение ложь. Если найдется вариант предикат1, при котором предикат2 = истине, то происходит переход к доказательству предикат3 и так далее.

Упражнения

    1. Создать БД "ученик" (имя, предмет, балл). Создать правила: хорошист, отличник, двоечник.

    2. Создать БД "поезд" (пункт отправления, пункт назначения, время в пути, расстояние). Сделать правила: пригородный, дальний, дневной, ночной.

    3. Создать БД "учитель" (предмет, фамилия, стаж, № школы) и правила: филолог, естественник, опытный, начинающий.

    4. Создать БД "дядя-племянник" и "тетя-племянник". Создать правила: кузен, внучатый племянник.

    5. Создать БД "автор" (имя, вид произведения, страна) и правила" писатель, композитор, европейский, азиатский.

    6. Создать БД "тетя-племянница", "дядя-племянница" и правила: кузины, внучатые племянницы.

    7. Написать БД "студент" (фамилия, балл 1, балл 2) и правило "стипендия" (имя, величина).

    8. Написать БД "победа" (команда 1, команда 2) для 4 команд. Сделать правило "победитель" (команда 1, команда 2).

    9. Создать БД "путь" (пункт 1, пункт 2) для 5 населенных пунктов и правило "есть путь" (A, B).

    10. Создать БД "мать-дочь" и правило "прабабушка".

    11. Создать БД "родитель-потомок". Сделать правила: сын, дочь.

    12. Создать БД "жильцы" (фамилия, этаж, квартира) и правило "плата за лифт (X) для жильцов этажей выше 3".

    13. Создать БД "мать-дочь" и "мать-сын". Создать правила: брат (X, Y) и сестра (X, Y).

    14. Создать БД "отец-дочь" и "отец-сын" и правило "дедушка" (X, Y).

    15. Создать БД: возраст (имя, возраст), мужчина (X), женщина (X) и правило "подлежит призыву (X)".

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]