Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по СИИ.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
424.24 Кб
Скачать

Общий обзор языка prolog на примере конкретной программы.

Синтаксически все объекты данных в Прологе представляют собой термы.

Тип данных Пролог распознаёт по его синтаксической форме в тексте программы.

Атом – синтаксически неделимый терм, представляющий собой произвольную последовательность символов, составленную одним из следующих способов:

  1. из цепочки букв, цифр и символов подчёркивания, начиная со строчной буквы (например, parent_, z3);

  2. из специальных символов (например, <___>);

  3. из цепочки символов, помещённых в одинарные кавычки (например, ‘Tom’, ‘Tom_X’).

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

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

Переменные Пролога служат для обозначения объекта, к которому нельзя сослаться по имени. Переменная – цепочка, состоящая из букв, символов подчёркивания, начинающихся с прописной буквы, либо с символа подчёркивания. Тогда данная запись будет переменной.

Если переменная встречается в предложении один раз, то нет необходимости изобретать ей имя, можно использовать анонимную переменную, которая обозначается _ (символ подчёркивания).

Областью действия переменной является предложение. Если имя переменной встречается в двух предложениях, то оно обозначает две разные переменные. Внутри одного предложения это имя означает одну и ту же переменную. Исключение составляет анонимная переменная. Всякий раз, когда в предложении появляется символ подчёркивания, он означает новую переменную.

Пример программы.

Рассмотрим дерево родственных отношений.

Пишется на латинице, но в примере на русском для понятности.

Программа:

родитель (“Пам”,”Боб”).

родитель (“Том”,”Боб”).

родитель (“Том”,”Лиз”).

родитель (“Боб”,”Энн”).

родитель (“Боб”,”Пат”).

родитель (“Пат”,”Джим”).

Вопросы:

  1. ? родитель (“Боб”,”Пат”). Ответ: Yes.

  2. ? родитель (“Лиз”,”Пат”). Ответ: No.

  3. ? родитель (“Том”,”Энн”). Ответ: No.

  4. ? родитель (Х,”Лиз”). Ответ: Yes, X=”Том”.

  5. ? родитель (“Боб”,Х). Ответ: Yes, X=”Энн”, X=”Пат”.

  6. ? родитель (X,Y). Ответ: Yes, X=”Пам”, Y=”Боб”

X=”Пам”, Y=”Боб”

…………………….

После перебора всех вариантов ответ No.

  1. (Кто родитель родителя Джима?) ? родитель (X,”Джим”), родитель (Y,X). Ответ: Yes, X=”Пат”, Y=”Боб”.

  2. (Кто внуки Тома?) ? родитель (”Том”,Х), родитель (X,Y).

  1. На Прологе легко определить отношение с помощью указания n-ки объектов, для которых это отношение выполняется.

  2. Пользователь может легко задавать Пролог-системе вопросы, но только касающиеся отношений, определённых в программе.

  3. Пролог-программа состоит из предложений, каждое из которых заканчивается точкой.

  4. Аргументами отношения могут быть, среди прочего, конкретные объекты – константы и абстрактные объекты – переменные.

  5. Вопросы к системе состоят из одного или более целевых утверждений (целей). Последовательность целей через запятую означает конъюнкцию целей (И), через ; дизъюнкцию целей (ИЛИ).

  6. Пролог-система рассматривает вопросы как цели, к достижению которых ей надо стремиться.

  7. Ответ на вопрос может быть положительным или отрицательным в зависимости от того, может ли быть соответствующая цель достигнута или нет. В случае положительного ответа мы говорим, что цель достижима и успешна, в противном случае цель недостижима, имеет неуспех или терпит неудачу.

  8. Если на вопрос существует несколько ответов, Пролог-систеиа найдёт столько из них, сколько пожелает пользователь.

Добавим в программу отношения типа мужчина и женщина. Они унарные.

женщина (“Пам”).

женщина (“Лиз”).

женщина (“Пат”).

женщина (“Энн”).

мужчина (“Том”).

мужчина (“Боб”).

мужчина (“Джим”).

Введём отношение отпрыск, которое обратно отношению родитель. Будем основываться на утверждении. Что для всех X и Y Y является отпрыском Х, если Х является родителем Y.

Если X – родитель Y, то Y – отпрыск X.

отпрыск (Y,X) :- родитель (X,Y).

часть вывода условие условная часть

(голова предложения) (тело предложения)

Это является правилом.

Теперь есть отношения: родитель, мужчина, женщина и правило.

Вопрос:

? отпрыск (“Лиз”,”Том”).

Решение: Y=”Лиз” X=”Том” и выполнится родитель (“Том”,”Лиз”). Ответ: Yes.

Определим отношение мать:

Для всех X и Y: X является матерью Y, если X является родителем Y и X – женщина.

мать (X,Y) :- родитель (X,Y), женщина (Х).

Отношение сестра:

Для любых X и Y X является сестрой Y, если:

а) у X и Y общий родитель Z;

б) X – женщина.

сестра (X,Y) :- родитель (Z,X), родитель (Z,Y), женщина (X).

? сестра (“Энн”,”Пат”).

Решение: сестра (X,Y) :- родитель (Z,X), родитель (Z,Y), женщина (X).

X=”Энн”, Y=”Пат”.

Проверяется все 3 утверждения: родитель (Z,”Энн”) Z=”Боб” и т. д.

Пролог-программы можно легко расширять, добавляя в них новые предложения.

Предложения бывают 3 типов:

  1. факты;

  2. правила;

  3. вопросы.

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

Тело – список целей, разделённых запятыми (И) или точкой с запятой (ИЛИ).

Факты – это предложения, имеющие пустое тело.

Предполагается, что на переменные действует квантор всеобщности, читаемый как «для всех».