Программа на языке Prolog состоит из предложений. Предложения трех видов: факты, правила, вопросы. Все предложения строятся из термов (синтаксическая единица).
На языке программирования описываются объекты и факты, затем описываются правила, при которых эти факты являются истинными.
Факт – это предложение, которое истинное всегда. Например, рассмотрим такой факт:
like(kolya, apple)
Предикат like
говорит о том, что Коля любит яблоки. like
– это аргумент/имя терма/функтор. (kolya, apple)
– это аргументы предиката.
Правила позволяют вывести один факт из других фактов. Другими словами, можно сказать, что правило – это заключение, для которого известно, что оно истинно, если одно или несколько других найденных заключений или фактов являются истинными. Тело правила – это ряд условий, которые должны быть истинными, чтобы Prolog мог доказать, что заголовок правила истинен. Тело правила состоит из термов, встроенных предикатов связанных «,/;». Например, «Если Анна любит Х, то и Майк тоже это любит.»:
like(mike, X):-like(anna, X).
В Prolog можно задать вопрос (поставить цель). Она может быть внутренней и внешней. Внутренняя цель записывается в самой программе, в разделе goal. Внешняя цель вызывается при запуске программы на выполнение. Она может содержать несколько подцелей. Например, рассмотрим факты:
year(ivanov, 25).
year(grishko, 30).
Тогда можно поставить такие цели:
• Сколько лет Иванову? Ответ:
X = 25
.
year(ivanov, X).
• Кому 30 лет? Ответ: X = grishko
.
year(X,30).
• Иванову 20 лет? Ответ: нет.
year(ivanov, 20)
Переменные в Prolog инициализируются при сопоставлении с константами фактов и правил, до инициализации переменная свободна, а после – становится связанной (в пределах одного предложения). Переменные используются, как часть процесса поиска решения. Константы – это поименованные конкретные объекты или отношения. Переменные служат для обозначения объектов, значение которых меняется в ходе выполнения программы. Имена переменных могут начинаться с прописной буквы или с символа подчеркивания. Если значение переменной не интересует, то можно использовать анонимные переменные в виде символа подчеркивания.
Составной терм состоит из функционального символа и упорядоченного множества термов, являющихся его аргументами. Идея состоит в том, что составной терм обозначает тот или иной индивидуальный объект, зависящий от других индивидуальных объектов, представленных его аргументами. Функциональный символ описывает характер зависимости. Например, можно было бы иметь функциональный символ, обозначающий «расстояние» и имеющий два аргумента. В этом случае составной терм обозначает расстояние между объектами, представленными его аргументами. Составной терм можно рассматривать как структуру языка Prolog, имеющую в качестве функтора функциональный символ. Составные термы будут записываться по правилам синтаксиса Prolog так, что, например, жена(генри) может обозначать жену Генри, расстояние(точка1, X) может обозначать расстояние между некоторой заданной точкой и каким-то другим объектом.
Наиболее важной операцией над термами является сопоставление.
Сопоставление – это процесс, на вход которого подаются 2 терма, а он проверяет соответствуют ли термы друг другу. Два терма сопоставимы, если они идентичны или переменные в обеих термах можно приписать в качестве значений объектов таким образом, чтобы после постановки этих объектов в термы, вместо переменных последние стали идентичны. Например:
data(20, "may",Y)
data(X,A,B)
сопоставимы если Х = 20
, А = may
, В = Y
.