родительродителя( X, Z):-

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

               родитель( Y, Z).

На рис. 1.4 показано отношение сестра:

    Для любых X и Y

         X является сестрой Y, если

         (1)       у X и Y есть общий родитель, и

         (2)       X - женщина.

Рис. 1. 4.  Определениеотношения сестра.

Граф на рис. 1.4 можно перевести на Пролог так:

        сестра( X, Y) :-

               родитель( Z, X),

               родитель( Z, Y),

               женщина( X).

Обратите внимание на способ, с помощью котороговыражается требование "у X и Y есть общийродитель". Была использована следующаялогическая формулировка: "некоторый Z долженбыть родителем X и этот же самый Z должен бытьродителем Y". По-другому, менее красиво, можнобыло бы сказать так: "Z1 - родитель X, Z2 - родительY и Z1 равен Z2".

Теперь можно спросить:

       ?-  сестра( энн, пат).

Как и ожидается, ответ будет "yes" (да) (см.рис. 1.1). Мы могли бы заключить отсюда, чтоопределенное нами отношение сестраработает правильно. Тем не менее в нашейпрограмме есть маленькое упущение, котороеобнаружится, если задать вопрос: "Кто являетсясестрой Пат?"

       ?-  сестра( X, пат).

Система найдет два ответа, один из которыхможет показаться неожиданным:

        X  =  энн;

        X  =  пат



27 из 538