logo
Учебник_Final

3.1. Язык логического программирования Пролог

После почти 20-летнего успешного развития в 1996 г. Пролог стал стандартом логических языков программирования. Главным отличием его от так называемых процедурных языков, таких как Borland С, Delphi, Java и др., является его декларативный характер.

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

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

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

Составляющие Пролог-программы

В самом общем виде Пролог-программа может быть представлена как совокупность двух основных разделов.

Первый раздел содержит постановку задачи, т.е. описание ее условия в виде набора исходных данных, представленных в форме БД.

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

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

Утверждения

Простейший вид утверждений Пролог-программы – это факт. Он констатирует наличие отношений между объектами или переменными. Отношение в программе называется предикатом.

Пример.

нравится ("Лена", "теннис").

играет ("Костя", "футбол").

имеет ("Сергей", ___).

отец ("Катя", "Дмитрий").

плюс (3, 2, 5).

Составляющими отношений или предикатов являются атомы и переменные. Атомы в Пролог-программе записываются строчными буквами. Если атом необходимо записать с прописной буквы, его значение заключается в апострофы (двойные кавычки). В конце факта в базе данных программы ставится точка.

Вопросы в Пролог-программе имеют тот же формат, что и факты. Их можно различить по контексту, расположению на экране в режиме отладки программы или по наличию знака «?» в начале или в конце утверждения (в зависимости от диалекта интерпретатора). Семантически вопрос в Пролог-программе определяет наличие того или иного отношения между объектами.

Пример.

нравится ("Лена", "хоккей").

нравится ("Лена", "теннис").

? нравится ("Лена", X).

X = "теннис".

Правила предназначены для вывода логического следствия на основе имеющейся БД. Правила в Пролог-программе записываются в виде конструкции, называемой резольвентой:

t1 :- а1, а2, ... , аN. , (2.3)

где t1 – подцель (теорема или промежуточная цель программы);

а1, а2, … , аN – аксиомы, посредством которых достигается подцель;

:- – знак определения функции (читается: «определяется, как…»);

, – знак операции конъюнкции (логическое «и»);

. – обязательный знак окончания правила (резольвенты).

Пример.

Дано: «все люди ошибаются», «Сократ – человек».

Первую фразу можно формализовать следующим образом: «для всех X, X ошибается, если X – человек».

Запишем исходные данные в терминах Пролог-программы:

failable (X) :- person (X).

person (socrates).

Сформулируем запрос:

failable (socrates),

в результате получим ответ: yes.