|
НАЗАД
Предложение Пролога, имеющее тот же смысл, записывается так:
предок(X,Z):-родитель(X,Y),предок(Y,Z).
Теперь мы построили полную программу для отношения предок, содержащую два правила: одно для ближайших предков и другое для отдаленных предков. Здесь приводятся они оба вместе:
предок(X,Z):-родитель(X,Z).
предок(X,Z):-родитель(X,Y),предок(Y,Z).
Ключевым моментом в данной формулировке было использование самого отношения предок в его определении. Такое определение может озадачить - допустимо ли при определении какого-либо понятия использовать его же, ведь оно определено еще не полностью. Такие определения называются рекурсивными. Логически они совершенно корректны и понятны; интуитивно это ясно. Но будет ли в состоянии пролог-система использовать рекурсивные правила? Оказывается, что пролог-система очень легко может обрабатывать рекурсивные определения. На самом деле, рекурсия - один из фундаментальных приемов программирования на Прологе. Без рекурсии с его помощью невозможно решать задачи сколько-нибудь ощутимой сложности.
Возвращаясь к нашей программе, можно теперь задать системе вопрос: «Кто потомки Пам?» То есть: «Кто тот человек, чьим предком является Пам»
?- предок(пам,X).
X = боб;
X = энн;
X = пат;
X = джим.
Ответы системы, конечно, правильны, и они логически вытекают из наших определений отношений предок и родитель. Возникает, однако, довольно важный вопрос: «Как в действительности система использует программу для отыскания этих ответов?»
Неформальное объяснение того, как система это делает, приведено в следующем параграфе. Но сначала давайте объединим все фрагменты нашей программы о родственных отношениях, которая постепенно расширялась по мере того, как мы вводили в нее новые факты и правила.
Отношение предок, например, определено с помощью двух предложений. Будем говорить, что эти два предложения входят в состав отношения предок. Иногда бывает удобно рассматривать в целом все множество предложений, входящих в состав одного отношения. Такое множество называется процедурой.
Два предложения, входящие в состав отношения предок, выделены добавленными в программу пояснениями в виде комментариев. Вообще говоря, комментарии пролог - системой игнорируются. Они нужны лишь человеку, который читает программу. В Прологе комментарии отделяются от остального текста программы специальными скобками «/*» и «*/». Таким образом, прологовский комментарий выглядит так
/* Это комментарий */
Другой способ, более практичный для коротких комментариев, использует символ процента %. Все, что находится между % и концом строки, расценивается как комментарий:
% Это тоже комментарий
НАЗАД ЧИТАТЬ ДАЛЕЕ
|