Ключевым моментом в данной формулировке было использование самого отношения
предок в его определении. Такое определение может озадачить - допустимо ли при определении какого-либо понятия использовать его же, ведь оно определено еще не полностью. Такие определения называютсяВозвращаясь к нашей программе, можно теперь задать системе вопрос: "Кто потомки Пам?" То есть: "Кто тот человек, чьим предком является Пам ?"
?- предок( пам, X).
X = боб;
X = энн;
X = пат;
X = джим
Ответы системы, конечно, правильны, и они логически вытекают из наших определений отношений
предок и родитель. Возникает, однако, довольно важный вопрос: "Неформальное объяснение того, как система это делает, приведено в следующем разделе. Но сначала давайте объединим все фрагменты нашей программы о родственных отношениях, которая постепенно расширялась по мере того, как мы вводили в нее новые факты и правила. Окончательный вид программы показан на рис. 1.8.
При рассмотрении рис. 1.8 следует учесть два новых момента: первый касается понятия "процедура", второй - комментариев в программах. Программа, приведенная на рис. 1.8, определяет несколько отношений -
родитель, мужчина, женщина, предок и т.д. Отношение предок, например, определено с помощью двух предложений. Будем говорить, что эти два предложения входят в состав отношенияродитель( пам, боб).
% Пам - родитель Бобародитель( том, боб).
родитель( том, лиз).
родитель( бoб, энн).
родитель( боб, пат).
родитель( пат, джим).
женщина( пам).
% Пам - женщинамужчина( том).
% Том - мужчинамужчина( боб).
женщина( лиз).
женщина( энн).
женщина( пат).
мужчина( джим).
отпрыск( Y, X) :-
% Y - отпрыск X, еслиродитель( X, Y). % X - родитель Y
мать( X, Y) :-
% X - мать Y, еслиродитель( X, Y), % X - родитель Y и
женщина( X). % X - женщина
родительродителя( X, Z) :-
% X - родитель родителя Z, если
родитель( X, Y), % X - родитель Y и
родитель( Y, Z). % Y - родитель Z
сестра( X, Y) :-
% X - сестра Yродитель( Z, X),
родитель( Z, Y)
% X и Y имеют общего родителя
женщина( X, Y), % X - женщина и
различны( X, Y). % X отличается от Y
предок( X, Z) :-
% Правило пр1: X - предок Zродитель( X, Z).
предок( X, Z) :-
% Правило пр2: X - предок Zродитель( X, Y),
предок( Y, Z).
Рис. 1. 8.
Программа о родственных отношениях.предок
. Иногда бывает удобно рассматривать в целом все множество предложений, входящих в состав одного отношения. Такое множество называетсяНа рис. 1.8 два предложения, входящие в состав отношения предок
, выделены именами "пр1" и "пр2", добавленными в программу в виде/* Это комментарий */
Другой способ, более практичный для коротких комментариев, использует символ процента %. Все, что находится между % и концом строки, расценивается как комментарии:
% Это тоже комментарий
Упражнение
1. 6.
Рассмотрим другой вариант отношения предок:предок( X, Z) :-
родитель( X, Z).
предок( X, Z) :-
родитель( Y, Z).
предок( X, Y).
Верно ли и такое определение? Сможете ли Вы изменить диаграмму на рис. 1.7 таким образом, чтобы она соответствовала новому определению?
Посмотреть ответ
Назад | Содержание | Вперёд
Назад | Содержание | Вперёд
1. 4. Как пролог-система отвечает на вопросы
В данном разделе приводится неформальное объяснение того,