ПЕРВАЯ ПРОГРАММА

ГЛАВНОЕ МЕНЮ

В папке с установленным SWI/PROLOG войдите в директорию pl/bin, содержащую файл plwin.exe, и запустите его. На экране появится главное меню и главное (диалоговое) окно с приглашением SWI/PROLOG (см рис.1).

 

Рис.1 Вид диалогового окна SWI/PROLOG

Главное меню можно сделать активным, нажав F10 или Alt. Когда главное меню активно, его элементы можно выбрать с помощью клавиш управления курсором ( ) и последующим нажатием клавиши Enter. Выбирать элементы главного меню можно также и мышью.

ПЕРВАЯ ПРОГРАММА

Программа

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

Предикат

описывают отношение между объектами, которые являются аргументами предиката.

Факты

Констатируют наличие заданного предикатом отношения между указанными объектами.

ПРИМЕР

Констатация факта в предложениии

Эллен любит теннис.

в синтаксисе Пролога выглядит так:

Имя предиката (функтора) и объекта должно начинаться с маленькой буквы и может содержать латинские буквы, кириллицу, цифры и символ подчеркивания (_). Кириллица используется наравне с латинскими буквами. Обычно предикатам дают такие имена, чтобы они отражали смысл отношения. Например: main, add_file_name. Два предиката могут иметь одинаковые имена, тогда система распознает их как разные предикаты, если они имеют различное число аргументов (арность). Например,любит/2, любит/3.

Имя предиката может совпадать с именем какого-либо встроенного предиката SWI/PROLOG-а. Однако, если совпали имена пользовательского и встроенного предиката, то при обращении к нему (либо из интерпретатора, либо из программы), будет вызван пользовательский предикат, т.е. пользовательское определение «перекроет» предопределенное в SWI/PROLOG-е.

Правила

описывают связи между предикатами.

ПРИМЕР

Билл любит все, что любит Том.

в синтаксисе Пролога

любит('Билл',Нечто):- любит('Том',Нечто).

Правило B:-A соответствует импликации A→BЕСЛИ A , ТО B»).

В общем виде правило - это конструкция вида:

P0:-P1,P2,…,Pn.

которая читается «P0 истинно, если P1 и P2 и ... Pn истинны".

Предикат P0 называется заголовком правила, выражение P1,P2,…,Pn - телом правила, а предикаты Pi - подцелями правила. Запятая означает логическое "И".

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

Процедура

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

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

Переменная

- поименованная область памяти, где может храниться значение.

Если переменная не связана со значением – она называется свободной переменной.

Унификация

- процесс получения свободной переменной значения в результате сопоставления при логическом выводе в SWI/PROLOG-е.

Понятие переменной в логическом программировании отличается от базового понятия переменной, которое вводится в структурном программировании. Прежде всего, это отличие заключается в том, что переменная в SWI/PROLOG-е, однажды получив свое значение при унификации в процессе работы программы, не может его изменить, т.е. она скорее является аналогом математического понятия «переменная» – неизвестная величина. Переменная в SWI/PROLOG не имеет предопределенного типа данных и может быть связана с значением любого типа данных.

Переменная в SWI/PROLOG обозначается как последовательность латинских букв, кириллицы и цифр, начинающаяся с заглавной буквы или символа подчеркивания ( _ ). Заметим, что если значение аргумента предиката или его имя начинается с заглавной буквы, то оно пишется в апострофах (см. предыдущий пример).

В SWI/PROLOG различаются строчные и заглавные буквы.

Рассмотрим следующую программу на SWI/PROLOG, которую будем использовать для иллюстрации процессов создания, выполнения и редактирования Пролог-программ.

ПРОГРАММА 1. /* кто что любит */

любит('Эллен',теннис). %Эллен любит теннис

любит('Джон',футбол). %Джон любит футбол

любит('Том',бейсбол). %Том любит бейсбол

любит('Эрик',плавание). %Эрик любит плавание

любит('Марк',теннис). %Марк любит теннис

любит('Билл',X):-любит('Том',X). %Билл любит то, что любит Том

Комментарий в строке программы начинается с символа % и заканчивается концом строки. Блок комментариев выделяется специальными скобками: /* (начало) и */ (конец).