Запись правил и процедур
Правила в Прологе используются для описания определений, запросов к базам данных, а также обращений к другим правилам и процедурам. Примеры записи правил:
родитель (х,у) ¬ мама (х,у);
родитель (х,у) ¬ папа (х,у);
бабушка (x,z) ¬ мама (х,у), родитель (y,z);
дедушка (x,z) ¬ папа (х,у), родитель (y,z);
Общая форма записи правил на Прологе:
правило:
<заголовок> ( <определение>;Здесь <заголовок> отделяется от <определения> двумя знаками:
¬ «меньше» и «тире». В конце правила записывается «точка с запятой».
Заголовки правил имеют следующую форму:
заголовок:
<имя>(<парам>[,<парам> ...])
Здесь <имя> - это любое слово или словосочетание. В роли параметров в заголовках правил могут указываться переменные или конкретные значения либо неопределенные значения с помощью знака подчеркивания [_].
Описание заголовка служит образцом записи обращений к правилам и процедурам. Определения в правилах образуются из обращений к другим правилам и процедурам, а также из запросов к данным и встроенным процедурам Пролога. Общая форма записи определений в правилах:
определение:
<заголовок>[,<заголовок> ...]
Запросы и определения отделяются в описаниях правил запятыми и записываются по тем же правилам, что и заголовки.
Порядок записи обращений и запросов в определениях правил в языке Пролог весьма существенен, поскольку он задает порядок их применения и выполнения. Нарушение этого порядка может привести к значительному изменению конечных результатов выполнения правил и процедур.
Результатом выполнения любых процедур и правил в Прологе всегда являются логические значения - ДА либо НЕТ, соответствующее успеху или неуспеху их применения. В этом смысле применение правил в Прологе совпадает с проверкой условий в логике. Соответственно форма записи обращений к правилам и процедурам в Прологе совпадает с формой записи предикатов в математической логике.
Однако в отличие от математической логики, где существенны только логические значения этих предикатов, в Прологе результатом применения правил и процедур может быть конкретизация значений переменных, указанных в обращениях к ним.
Пример такого обращения:
? родитель (х,вова)
х = зина
Полученный ответ имеет двойной результат: во-первых, подтверждение истинности наличия «родителей» у «вовы», а во-вторых, конкретизация переменной «х» в обращении к процедуре «родитель» с именем «вова», которая дает значение «х = зина».
Кроме конкретизации значений переменных в запросах и обращениях результатами выполнения процедур и правил в Прологе могут быть различного рода побочные эффекты - вывод на экран линий, точек, картинок, сообщений, запись и считывание данных и т. п.
В этом смысле результаты выполнения процедур и программ на Прологе могут быть эквивалентны результатам выполнения программ на других языках программирования.