
?- родитель( боб,пат).
Найдя этот факт в программе, система ответит
yes (да)
Другим вопросом мог бы быть такой:
?- родитель( лиз,пат).
Система ответит
no (нет),
поскольку в программе ничего не говорится отом, является ли Лиз родителем Пат. Программаответит "нет" и на вопрос
?- родитель( том,бен).
потому, что имя Бен в программе даже неупоминается.
Можно задавать и более интересные вопросы.Например:"Кто является родителем Лиз?"
?- родитель( X, лиз).
На этот раз система ответит не просто "да"или "нет". Она скажет нам, каким должно бытьзначение X (ранее неизвестное), чтобывышеприведенное утверждение было истинным.Поэтому мы получим ответ:
X = том
Вопрос "Кто дети Боба?" можно передатьпролог-системе в такой форме:
?- родитель( боб, X).
В этом случае возможно несколько ответов.Сначала система сообщит первое решение:
X = энн
Возможно, мы захотим увидеть и другие решения. Онашем желании мы можем сообщить системе (вомногих реализациях для этого надо набрать точкус запятой), и она найдет другой ответ:
X = пат
Если мы потребуем дальнейших решений, системаответит "нет", поскольку все решенияисчерпаны.
Нашей программе можно задавать и более общиевопросы: "Кто чей родитель?" Приведем другуюформулировку этого вопроса:
Найти X и Y такие, что X -родитель Y.
На Прологе это записывается так:
?- родитель( X, Y).
Система будет по очереди находить все пары вида"родитель-ребенок". По мере того, как мыбудем требовать от системы новых решений, онибудут выводиться на экран одно за другим до техпор, пока все они не будут найдены. Ответывыводятся следующим образом:
