начальник(Familia, Oklad):- служ(Familia, Oklad), Oklad > 100.
Заголовок правила имеет такую же форму как и факт. Обозначение :- читается как “ если ”, затем следует тело правила. Каждое условие, входящее в тело, называется подцелью. Для того чтобы заголовок правила оказался истинным, необходимо, чтобы каждая подцель, входящая в тело, была истинной.
Пример 9.
Предположим, что создана база данных “ раб_смена ”. Каждый факт этой базы определяет смену, в которую работает служащий.
раб_смена(оля, дневная).
раб_смена(коля, вечерняя).
раб_смена(витя, вечерняя).
раб_смена(толя, дневная).
Следующее правило устанавливает, что два человека знают друг друга, если они работают в одну и ту же смену:
знает2(A,B):- раб_смена(А, Smena), раб_смена(B, Smena).
Пример 10.
В программе, текст которой приведен ниже, устанавливается: есть ли дуга между вершинами графа; связаны ли две вершины противоположно направленными дугами; образуют ли три следующие друг за другом дуги треугольник:
% описание существующих дуг в графе
arc_(a,c).
|
|
arc_(b,c). arc_(c,d). arc_(d,a). arc_(d,e). arc_(c,b). arc_(a,f).
% условие того, что вершины A и B связаны двумя противоположно направленными дугами
line_(A, B):-arc_(A, B),arc_(B, A).
% условие того, что три следующих друг за другом дуги образуют треугольник
tr(X,Y,Z):-arc_(X,Y),arc_(Y,Z),arc_(Z,X).
После запуска программы на выполнение в окне Dialog экрана появится строка?−.
Введем, например line(X, Y). В результате получим:
X = b, Y = c
X = c, Y = b
т.е. найдено два решения. Точно так же можно ставить вопросы для отношений arc_ и tr. Например, если ввести: arc_(a,b), результатом будет no (нет), а если ввести arc(a,f), - yes (да). На вопрос arc_(F,c) Пролог выдаст два решения: F = a и F = b.
Процедуры
Смысл фразы языка Пролог может быть понят либо с позиций декларативного подхода, либо с позиций процедурного подхода. Декларативный смысл подчеркивает существование отношений. Порядок следования подцелей в правиле не влияет на декларативный смысл этого правила.
При процедурной трактовке подчеркивается последовательность шагов, которые выполняет интерпретатор при обработке запроса. Таким образом приобретает значение порядок следования подцелей в правиле.