Рассмотрим структуры, описывающие отрезки
Два факта, описывающие свойство вертикальность и горизонтальность.
vertical(seg(point(X,Y),point(X,Y1))).
horiz(seg(point(X,Y),point(X1,Y))).
?-vertical(seg(point(2,2),point(2,5))).
Yes
?- horiz(seg(point(1,4),point(2,4))).
Yes
?-horiz(seg(point(1,4),point(2,X))).
X=4
Декларативная семантика Пролог- программ
Различают декларативную и процедурную семантику (смысл, понимание) Пролог- программ.
Декларативный смысл, касается только отношений, определенных в программе.
Декларативная семантика определяет, что должно быть результатом работы программы, не вдаваясь в подробности, как это достигается.
Пусть задано P:-Q, R, где P, Q, R -термы.
Тогда с точки зрения декларативного смысла это предложение читается: " P-истиино, если Q R истинны." Или " Из Q и R cледует Р." Т.е. определяются логические связи между головой предложения и целями в его теле.
Таким образом, декларативный смысл программы определяет, является ли данная цель истинной (достижимой), и если - да, то при каких значениях переменных она достигается.
Конкретизацией I предложения С называется результат подстановки в него на место каждой переменной некоторого терма.
Заметим, что это отличается от конкретизации переменной.
Пример:
Haschild(X):-parent(X,Y).
Пусть дана некоторая программа и цель G, тогда в соответствии с декларативной семантикой, можно утверждать, что:
Цель G истинна (достижима) тогда и только тогда, когда:
в программе существует предложение С, такое, что существует такая его (С) конкретизация I, что голова I cовпадает с G и все цели в теле I истинны.
Пример.
| female(ann). parent(ann, bob). mother(X):-parent(X, Y), female(X). | |
| ?- mother(ann). | |
Это определение можно распространить на вопросы следующим образом. В общем случае вопрос - список целей, разделенных запятыми.
Список целей называется истинным (достижимым), если все цели в этом списке истинны, достижимы при одинаковых конкретизациях переменных.
Запятая между целями означает конъюнкцию целей и они должны быть все истинны.
Дизъюнкция целей
Возможна дизъюнкция целей: истинна должна быть по крайней мере одна из целей. Дизъюнкция обозначается точкой с запятой "; ".
Например:
P:-Q;R.
Читается: Р истина, если Q - истина или R – истинна.
Запятая связывает цели сильнее, чем точка с запятой.