(а + в)*(с - 5)
В соответствии с введенным к настоящему моменту синтаксисом, такое выражение, используя символы *, + и - в качестве функторов, можно записать следующим образом:
*( +( а, в), -( с, 5) )

Рис. 2. 5. Древовидная структура, соответствующая арифметическому
выражению (а + w)*(s - 5) .
Это, конечно, совершенно правильный прологовский терм, однако это не та форма, которую нам хотелось бы иметь, при записи арифметических выражений. Хотелось бы применять обычную инфиксную запись, принятую в математике. На самом деле Пролог допускает использование инфиксной нотации, при которой символы *, + и - записываются как инфиксные операторы. Детали того, как программист может определять свои собственные операторы, мы приведем в гл. 3.
В качестве последнего примера рассмотрим некоторые простые электрические цепи, изображенные на рис. 2.6. В правой части рисунка помещены древовидные представления этих цепей. Атомы r1, r2, r3и r4- имена резисторов. Функторы пари послобозначают соответственно параллельное и последовательное соединение резисторов. Вот соответствующие прологовские термы:
посл( r1, r2)
пар( r1, r2)
паp( rl, пap( r2, r3) )
пар( r1, посл( пар( r2, r3), r4) )

Рис. 2. 6. Некоторые простые электрические цепи и их представление: (а) последовательное соединение резисторов rl и r2; (b) параллельное соединение двух резисторов; (с) параллельное соединение трех резисторов; (d) параллельное соединение r1 и еще одной цепи.
Упражнения
2. 1. Какие из следующих выражений представляют собой правильные объекты в смысле Пролога? Что это за объекты (атомы, числа, переменные, структуры)?
(а) Диана
(b) диана
(с) 'Диана'
(d) _диана
(e) 'Диана едет на юг'
(f) едет( диана, юг)
(g) 45
(h) 5( X, Y)
(i) +( север, запад)
(j) три( Черные( Кошки) )
Посмотреть ответ
2. 2. Предложите представление для прямоугольников, квадратов и окружностей в виде структурных объектов Пролога. Используйте подход, аналогичный приведенному на рис. 2.4. Например, прямоугольник можно представить четырьмя точками (а может быть, только тремя точками). Напишите несколько термов конкретных объектов такого типа с использованием предложенного вами представления.
Назад | Содержание | Вперёд
Назад | Содержание | Вперёд
2. 2. Сопоставление
В предыдущем разделе мы видели, как используются термы для представления сложных объектов данных. Наиболее важной операцией над термами является сопоставление . Сопоставление само по себе может производить содержательные вычисления.
Пусть даны два терма. Будем говорить, что они сопоставимы , если:
(1) они идентичны или
(2) переменным в обоих термах можно приписать в качестве значений объекты (т.е. конкретизировать их) таким образом, чтобы после подстановки этих объектов в термы вместо переменных, последние стали идентичными.
Например, термы дата( Д, М, 1983)и дата( Д1, май, Y1)сопоставимы. Одной из конкретизации, которая делает эти термы идентичными, является следующая:
Д заменяется на Д1
М заменяется на май
Y1 заменяется на 1983
Более компактно такая подстановка записывается в привычной форме, т. е. в той, в которой пролог-система выводит результаты:
Д = Д1
М = май
Y1 = 1983
С другой стороны, дата( Д, М, 1983)и дата( Д1, Ml, 1944)не сопоставимы, как и термы дата( X, Y, Z)и точка( X, Y, Z).
Сопоставление - это процесс, на вход которого подаются два терма, а он проверяет, соответствуют ли эти термы друг другу. Если термы не сопоставимы, будем говорить, что этот процесс терпит неуспех . Если же они сопоставимы, тогда процесс находит конкретизацию переменных, делающую эти термы тождественными, и завершается успешно .
Рассмотрим еще раз сопоставление двух дат. Запрос на проведение такой операции можно передать системе, использовав оператор '=':
?- дата( Д, М, 1983) = дата( Д1, май, Y1).
Читать дальше