Программирование на языке Пролог для искусственного интеллекта | страница 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 — структуры, то они сопоставимы, только если