Определение отношений в программе
В настоящей главе вводятся основные понятия логического программирования и базовые понятия языка Пролог. Рассматриваются примеры определения отношений в программе на языке Пролог. Показывается, как использовать интерпретатор PIE для написания программ на языке Пролог, а также как создавать консольные приложения в системе Visual Prolog. Описываются основные разделы программы в языке Visual Prolog.
1.1. Понятие логической программы
Логическая программа — это последовательность предложений, описывающих отношения между элементами, или объектами, некоторой задачи. Объекты представляются термами. Термы определяются индуктивно — это константы, переменные или выражения вида , где
— функциональный символ, а
— термы. Термы без переменных называются основными, или замкнутыми термами. Отношения описываются с помощью предикатов. Выражения вида
, где
— имя предиката, а
— термы, называются атомарными формулами. Атомарная формула или ее отрицание называется литералом.
Предложение логической программы имеет вид:
,
где — знак конъюнкции,
— знак импликации,
— атомарная формула, а
— литералы. На языке Пролог такое предложение записывается следующим образом:
.
Предложения в языке Пролог называют правилами. В конце правила ставится знак точки. В общем случае структура правила имеет вид:
.
Правило с пустым телом называется фактом. Правило с пустым заголовком — это цель, запрос или вопрос к программе.
По умолчанию предполагается, что переменные в правилах программы связаны кванторами всеобщности, а в запросе — кванторами существования.
Рассмотрим программу
млекопитающее("слон"). млекопитающее("зебра"). животное("страус"). животное("уж"). животное(X):- млекопитающее(X).
С помощью фактов определяются безусловные отношения. Отношению "млекопитающее" принадлежат элементы "слон" и "зебра". В программе они представлены константами. Соответственно, область истинности предиката млекопитающее имеет вид: {слон, зебра}.
Правило выражает импликацию
.
Областью истинности предиката животное является множество {страус, уж, слон, зебра}.
Вопросы бывают частные и общие, простые и составные. Частные вопросы помогают выяснить, верно ли, что заданные элементы принадлежат отношению:
.
В ответе на частный запрос отмечается истинность или ложность цели.
Общие вопросы задаются для того, чтобы выяснить, какие элементы принадлежат отношению. В них используются переменные:
.
Ответом на запрос является множество значений переменных, при которых формула цели является истинной.
Простые вопросы состоят из одной цели, составные — из нескольких, их называют подцелями. В составных вопросах подцели соединяются знаками конъюнкции "," или знаками дизъюнкции ";" (см. упр. 2). В первом случае запрос называется конъюнктивным, во втором — дизъюнктивным. Значения переменных в подцелях, разделенных знаками дизъюнкции, не связаны между собой.
Переменные в языке Пролог локальны и имеют математический смысл. Их значение сохраняется только на протяжении одного правила. Они не объявляются, в любом предложении их всегда можно переименовать. Переменные пишутся с прописной буквы или начинаются со знака подчеркивания. Состоят только из знака подчеркивания или начинаются с него анонимные переменные, которые не принимают никаких значений. Если в предложении встречается несколько анонимных переменных, то все они считаются разными переменными, хотя и обозначаться могут одинаково, например, с помощью только знака подчеркивания "_".
Во всех словах — ключевых словах, именах переменных, предикатах, доменах и др., которые используются в программе, имеет значение регистр только первого символа, регистр остальных символов не важен.
В языке Visual Prolog комментарий до конца строки начинается со знака %. Между знаками /* и */ можно заключать комментарии произвольной длины.
Всюду ниже обозначение используется для указания арности отношения или предиката: предикат
имеет арность
.