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



>Д = Д1

>М = май

>Y1 = 1983

С другой стороны, >дата( Д, М, 1983) и >дата( Д1, M1, 1944) не сопоставимы, как и термы >дата( X, Y, Z) и >точка( X, Y, Z).

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

Рассмотрим еще раз сопоставление двух дат. Запрос на проведение такой операции можно передать системе, использовав оператор '>=':

>?- дата( Д, М, 1983) = дата( Д1, май, Y1).

Мы уже упоминали конкретизацию >Д = Д1, >М = май, >Y1 = 1983, на которой достигается сопоставление. Существуют, однако, и другие конкретизации, делающие оба терма идентичными. Вот две из них:

>Д  = 1

>Д1 = 1

>М  = май

>Y1 = 1983


>Д  = третий

>Д1 = третий

>М  = май

>Y1 = 1983

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

>?- дата( Д, М, 1983) =  дата( Д1, май, Y1),

>   дата( Д, М, 1983) = дата( 15, М, Y).

Для достижения первой цели система припишет переменным такие значения:

>Д  = Д1

>М  = май

>Y1 = 1983

После достижения второй цели, значения переменных станут более конкретными, а именно:

>Д  = 15

>Д1 = 15

>М  = май

>Y1 = 1983

>Y  = 1983

Этот пример иллюстрирует также и тот факт, что переменным по мере вычисления последовательности целей приписываются обычно все более и более конкретные значения.

Общие правила выяснения, сопоставимы ли два терма >S и >T, таковы:

(1) Если S и T — константы, то S и T сопоставимы, только если они являются одним и тем же объектом.

(2) Если S — переменная, а T — произвольный объект, то они сопоставимы, и S приписывается значение T. Наоборот, если T —переменная, а S — произвольный объект, то T приписывается значение S.

(3) Если S и T — структуры, то они сопоставимы, только если