Правила. Помимо фактов база данным может содержать факты

Помимо фактов база данным может содержать факты. Правило отличается от факта тем, что связывается наличие отношения между объектами с выполнением некоторого условия, представленного целью или конъюнкцией целей. Другое отличие состоит в том, что правило обычно выражает не частные случаи, а общие закономерности. Приведем пример:

likes(bill, X) :- prefers(X, wine).

Здесь условие состоит из единственной цели prefers(X, wine). Данное правило соответствует предложению "Bill likes anybody, provided (if) she prefers a wine". В отличие фактов likes, данное правило охватывает не одну пару объектов, а (потенциально) множество таких пар (в данном случае две пары).

Выполним следующие запросы:

?- likes(bill, jane).

true.

?- likes(X, jane).

X = bill ; false.

Если при попытке удовлетворить цель Пролог встречает не факт, а правило, то Пролог запоминает текущее положение в базе данных и переходит удовлетворению целей этого правила так, как если бы они были запросом. Если исходная цель содержала переменные, то эти переменные будут связаны в ходе удовлетворения целей, перечисленных в правиле. Связывание переменных, указанных в запросе, с переменными, указанными правиле происходит по порядку, а не по имени (…).

В базе данных Пролога один и тот же предикат может определяться как фактами, так и правила, причем правил, как и факторов, может быть несколько. Строго говоря, разделение на факты и правила искусственное (и преследует учебные цели); с точки зрения Пролога факт — это правило с пустым (т. е. всегда выполняющимся) условием. Вместе факты и правила часто называются предложениями.

Добавим в базу данных следующие правила.

likes(kate, X) :- likes(jane, X), likes(mary, X).

is_happy(X) :- likes(X, Y), likes(Y, X).

Рассмотрим выполнение следующих запросов

?- likes(X, john).

X = jane ; X = alice ; X = mary ; X = kate.

?- is_happy(X).

X = john ; X = mary ; false.

?- is_happy(X), prefers(X, Y).

X = mary, Y = wine ; false.

Более подробно

Термы

Программа на Прологе — это набор термов. Термы:

· константы:

o атомы;

o числа;

· переменные;

· структуры (составные термы).

Атомы можно записывать как:

· последовательность букв и цифр, начиная с буквы в нижнем регистре, например…;

· последовательность символов + - * / \ ~ < > : . ? @ # $ &, например…;

· последовательность произвольных символов, заключенных в одинарные кавычки. Отметим, что 'mary' — это то же самое, что mary, а '--->' — то же самое, что --->.

Числа могут иметь знак, десятичную точку и экспоненту, например….

Переменные записываются как последовательность букв и цифр, начиная с буквы в верхнем регистре.

Структура состоит из функтора и компонентов (сначала функтор, потом компоненты в круглых скобках через запятую). Функтор — атом, а каждый из компонентов — произвольный терм (в т. ч. структура). Примеры:

likes(john, mary)

beliefs(alice, likes(john, mary))

knows(jane, beliefs(alice, likes(john, mary)))

birth_date(john, date(1980, 6, 15))

+(1, 2)

*(+(1, 2), +(3, 4))

Наши рекомендации