Пример 8. начальник(Familia, Oklad) :- служ(Familia, Oklad), Oklad > 100

начальник(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.

Процедуры

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

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: