Программирование на языке Пролог | страница 37
2.6.1. Успешное доказательство конъюнкции целевых утверждений
Пролог пытается согласовать с базой данных входящие в конъюнкцию целевые утверждения в том порядке, в каком они написаны (слева направо), где бы они ни появились – в теле правила или в вопросе. Это означает, что Пролог не будет проверять некоторое утверждение, пока не будет доказан его сосед слева. А сосед справа будет рассматриваться только после доказательства данного целевого утверждения. Рассмотрим следующую простую программу о семейных связях:
родители (С,M,F):- мать(С,М), отец(C,F).
мать(джон,анна).
мать(мэри,анна).
отец(мэри,фред). отец(джон,фред).
Давайте рассмотрим последовательность событий, позволяющую дать ответ на вопрос:
?-женщина(мэри), родители(мэри,М,Р), родители(джон,М,Р).
Данный вопрос позволяет определить, является ли мэри сестрой джона. Для того чтобы дать ответ Прологу, необходимо согласовать с базой данных последовательность подцелей, приведенных на рис. 2.1.
Представим целевые утверждения в виде прямоугольников, распределенных по странице. Стрелка, начинающаяся в верхней части страницы, указывает, какие целевые утверждения уже согласованы. Прямоугольники, через которые стрелка уже прошла, соответствуют согласованным целевым утверждениям. Прямоугольники, лежащие ниже острия стрелки, соответствуют целевым утверждениям, которые Пролог еще не рассматривал. При выполнении программы стрелка движется вверх и вниз по странице в соответствии с переходом Пролога от одного целевого утверждения к другому. Будем называть ее