Первая программа
ГЛАВНОЕ МЕНЮ
В папке с установленным 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). %Билл любит то, что любит Том
Комментарий в строке программы начинается с символа % и заканчивается концом строки. Блок комментариев выделяется специальными скобками: /* (начало) и */ (конец).