Язык Пролог, как один из языков логического программиро-
вания, базируется на описательной, или декларативной, точке зре-
ния на программирование. Поэтому при использовании Пролога в
большей мере требуются навыки логического мышления, а не знания
о методах кодирования управляющих воздействий на ЭВМ.
Декларативный смысл (семантика) Пролог-программ определяет
формальную, математическую сторону отношений между объектами,
определенными в программе и не касается вопросов процедурной
реализации того или иного отношения в различных версиях Пролог-
систем и на различных инструментальных ЭВМ. Способность Пролог-
систем к "самостоятельному" решению многих процедурных вопросов
выделяет этот язык из множества современных языков программиро-
вания. Данная особенность языка позволяет разработчику программ
максимально сосредоточиться на предметной области.
Декларативный смысл Пролог-программ заключается в определе-
нии достижимости заданной цели. Более строгое определение декла-
ративной семантики связано с понятиями конкретизации и вариантов
предложений.
Конкретизацией [S] предложения S называется результат замены
всех переменных, используемых в данном предложении, на их конкрет-
ные значения (термы).
Вариантом предложения S называется такое предложение C, в ко-
тором выполнена замена переменных.
Например, если в программе определено правило:
child(X,Y):-parent(Y,X)
и программа допускает два варианта этого предложения
child(X,V):-parent(V,X);
child(Z,Y):-parent(Z,X),
то возможные следующин конкретизации данного предложения:
child(bob,tom):-parent(tom,bob).
child(john,bob:-parent(bob,john).
Формальное определение декларативной семантики звучит
следующим образом.
Декларативный смысл Пролог-программы заключается в дости-
жении цели G, которая считается достигнутой только в том случае,
если среди множества предложений программы существует такое
предложение S, для которого возможна конкретизация K=[S] такая,
что
- во-первых, голова предложения К совпадает с целью G;
- во-вторых, все предикаты в теле предложения К истинны.
На практике чаще всего предикат цели G описывается в виде
множества подцелей (предикатов), объединенных между собой логи-
ческими операциями И и ИЛИ. Причем, если среди операций встреча-
ется n логических операций ИЛИ, то исходное предложение можно
представить в виде n+1 новых предложений. Например, если предикат
G определяется как дизъюнкция предикатов P и G, то есть
G:-P; Q,
то данное предложение можно записать в виде предложений:
G:-P.
G:-Q.
Аналогичным образом исходный предикат G:-P;Q;R можно
представить в виде трех предложений:
G:-P.
G:-Q.
G:-R.
С декларативной точки зрения эти варианты совершенно
равнозначны. Кроме того равнозначными с декларативной точки
зрения являются и следующие пары предложений:
G:-P,Q. G:-Q,P.
или
G:-P;Q. G:-Q;P.
В последнем случае пара предикатов соответствует следующим парам
предложений Пролог-программы:
G:-P. G:-Q.
G:-Q. G:-P.
То есть с декларативной точки зрения результат программы
(достижимость цели) не должен зависить ни от порядка предложе-
ний, ни от порядка предикатов в предложении.
На практике это свойство Пролог-программы не сохраняется
ввиду того, что сама Пролог-система представляет собой програм-
му, написанную на процедурном языке и реализованную на однопро-
цессорной ЭВМ с простейшей архитектурой. Это вторая особенность
Пролог-системы связывается с процедурной семантикой языка, зави-
сящей от его реализации. Декларативная и процедурная семантики
полностью и однозначно определяют результат действия конкретной
Пролог-системы. Процедурная семантика связана с внутренней орга-
низацией Пролог-системы и определяет последовательность функцио-
нирования ЭВМ, ориентированной на достижение цели.
Если предложение G:-P,Q с декларативной точки зрения имеет
следующий смысл:
"отношение G истинно, если истинны отношения P и Q (при
этом порядок записи P и Q роли не играет)";
то с процедурной точки зрения оно интерпретируется иначе:
"чтобы решить задачу G, необходимо сначала выполгить про-
цедуру P, а затем процедуру Q" (так как ЭВМ имеет один процес-
сор).
Запись предложения G:-Q,P определяет совершенно другую
программу, состоящую в выполнении сначала процедуры Q, а затем -
процедуры P. В некоторых случаях такая перестановка может при-
вести к неверному результату.
Таким образом, с процедурной точки зрения результат выпол-
нения программы может зависеть от порядка предложений и предика-
тов в них. |