Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ контр раб ПЗ и ИС.doc
Скачиваний:
7
Добавлен:
24.11.2019
Размер:
5 Мб
Скачать
☆
    1. Разветвления на языке Пролог

Язык Пролог не содержит инструкций, аналогичных инструк­циям разветвления и повторения в процедурных языках. Реализация этих процессов происходит в соответствии с правилами логического вывода. Поэтому для программирования нескольких реализаций одного и того же предиката следует построить столько же правил, сколько ветвей у разветв­ления. При этом у всех ветвей головой правил служит изучаемый предикат.

предикат 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

ответ.

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

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

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

Пример. Пусть имеется база данных:

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

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

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

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

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

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

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

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

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

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

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

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

    1. Правило логического вывода на языке Пролог

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

<предикат> if <предикат1>, <предикат2>, ..., <предикатn>

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

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

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

Пример задачи на упорядочение объектов. Рыбак поймал окуня, ерша и щуку. Щуку он поймал раньше окуня, ерша позже щуки, но раньше окуня. Какая рыба поймана раньше всех?

Clauses

раньше(щука,окунь).

раньше(щука,ерш).

раньше(ерш,окунь).

порядок(X,Y,Z) if раньше(X,Y), раньше(Y,Z).

Goal

порядок(X,Y,Z).