Программирование на языке Пролог для искусственного интеллекта | страница 29



>?- верт( отр( точка( 2, 3), P) ).

>P = точка( 2, Y)

Такой ответ означает: "Да, это любой отрезок, с концом в точке (2,Y), т.е. в произвольной точке вертикальной прямой x = 2". Следует заметить, что ответ пролог-системы возможно будет выглядеть не так красиво, как только что описано, а (в зависимости от реализации) приблизительно следующим образом:

>P = точка( 2, _136)

Впрочем, разница здесь чисто внешняя. В данном случае >_136 — это неинициализированная переменная. Имя >_136 — законное имя прологовской переменной, которое система построила сама во время вычислений. Ей приходится генерировать новые имена, для того чтобы переименовывать введенные пользователем переменные в программе. Это необходимо по двум причинам: первая — одинаковые имена обозначают в разных предложениях разные переменные; и вторая — при последовательном применении одного и того же предложения используется каждый раз его "копия" с новым набором переменных.

Другим содержательным вопросом к нашей программe является следующий: "Существует ли отрезок, который одновременно и горизонтален в вертикален?"

>?- верт( S), гор( S).

>S = отр( точка( X, Y), точка( X, Y) )

Такой ответ пролог-системы следует, понимать так: "да, любой отрезок, выродившийся в точку, обладает как свойством вертикальности, так и свойством горизонтальности одновременно". Этот ответ снова получен лишь из сопоставления. Как и раньше, в ответе вместо X и Y могут появиться некоторые имена, сгенерированные системой.

Упражнения

2.3. Будут ли следующие операции сопоставления успешными или неуспешными? Если они будут успешными, то какова будет результирующая конкретизация переменных?

(а) >точка( А, В) = точка( 1, 2)

(b) >точка( А, В) = точка( X, Y, Z)

(c) >плюс( 2, 2) = 4

(d) >+( 2, D)= +( E, 2)

(e) >треугольник( точка( -1, 0), Р2, Р3) =

     >треугольник( P1, точка( 1, 0), точка( 0, Y)

Результирующая конкретизация определяет семейство треугольников. Как бы Вы описали это семейство?

2.4. Используя представление отрезков, применявшееся в данной разделе, напишите терм, соответствующий любому отрезку на вертикальной прямой x = 5.

2.5. Предположим, что прямоугольник представлен термом >прямоугольник( P1, P2, P3, Р4), где >P — вершины прямоугольника, положительно упорядоченные. Определите отношение

>регулярный( R)

которое имеет место, если R — прямоугольник с вертикальными и горизонтальными сторонами.

2.3. Декларативный смысл пролог-программ

В главе 1 мы уже видели, что пролог-программу можно понимать по-разному: с декларативной и процедурной точек зрения. В этом и следующем разделах мы рассмотрим более формальное определение декларативного и процедурного смыслов программ базисного Пролога. Но сначала давайте еще раз взглянем на различия между этими двумя семантиками.