
родительродителя( 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 = пат
