X  =  пам

        Y  =  боб;

        X  =  том

        Y  =  боб;

        X  =  том

        Y  =  лиз;

        .  .  .

Мы можем остановить поток решений, набрав,например, точку вместо точки с запятой (выборконкретного символа зависит от реализации).

Нашей программе можно задавать и еще болеесложные вопросы, скажем, кто является родителемродителя Джима? Поскольку в нашей программепрямо не сказано, что представляет собойотношение родительродителя, такойвопрос следует задавать в два этапа, как этопоказано на рис. 1.2.

        (1)    Кто родительДжима?   Предположим, что это некоторый Y.

        (2)    Кто родитель Y?  Предположим, что это некоторый X.

Такой составной вопрос на Прологе записываетсяв виде последовательности двух простых вопросов:

        ?-  родитель( Y, джим),родитель( X, Y).

Ответ будет:

        X  =  боб

        Y  =  пат

Рис. 1. 2.   Отношение родительродителя, выраженное через композицию двух отношений родитель.

Наш составной вопрос можно интерпретировать итак: "Найти X и Y, удовлетворяющие следующимдвум требованиям":

        родитель ( Y, джим)  и  родитель( X, У)

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

        родитель ( X, Y)   и  родитель ( Y, джим)



20 из 538