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

       ?-  дата( Д, М, 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 и Т, таковы:

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

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

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

(а)    S и Т имеют одинаковый главный функтор

        и

(б)    все их соответствующие компоненты сопоставимы.

        Результирующая конкретизация определяется сопоставлением компонент.

Вы читаете Prolog
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату