Здесь мы воспользуемся описанным ранее правилом
• X
является женщиной,• X
имеет мать М и отца F и• Y
имеет тех же мать и отца, что и X.Это можно записать в виде следующего правила Пролога:
является_сестрой(X,Y):- женщина(X), родители(X,M,P), родители(Y,M,P).
Мы используем переменные M
и F для обозначения?- является_сестрой(алиса,эдуард).
Имея описанные выше базу данных и правила является_сестрой
и получив такой вопрос, Пролог выполняет следующие действия:1. Сначала вопрос сопоставляется с единственным правилом для предиката является_сестрой
, приведенным выше. При этом переменная X конкретизируется, принимая значение алиса, и переменная Y конкретизируется значением эдуард. Правило, с которым произошло сопоставление, отмечается маркером. Теперь Пролог пытается последовательно согласовать с базой данных три предиката, входящие в тело правила.3. Теперь Пролог ищет соответствие для предиката родители(алиса,M,F)
, где переменные M и F сопоставимы с любыми аргументами, так как первоначально они неконкретизированы. Факт, с которым происходит сопоставление, есть родители(алиса, виктория,альберт), и тем самым вторая цель достигнута. Пролог отмечает маркером соответствующее место в базе данных (шестое утверждение сверху) и записывает, что M присвоено значение виктория, a F – значение альберт. (Если хотите, вы можете делать соответствующую запись над целевым утверждением в правиле.) Затем Пролог пытается найти соответствие для следующего предиката в правиле.4. Теперь Пролог ищет в базе данных факт родители(эдуард,виктория,альберт),
так как из запроса нам известно, что Y – это эдуард, а из предыдущего шага мы знаем, что M и F обозначают виктория и альберт. Эта цель достигается, поскольку найден подходящий факт (пятое утверждение сверху). Так как это последняя цель в конъюнкции, то и полное целевое утверждение является согласованным с базой данных, и тем самым доказано, что факт является_сестрой(алиса, эдуард) является истинным, Пролог отвечает да.Предположим, мы хотим знать, является ли Алиса чьей-либо сестрой. Соответствующий вопрос на Прологе имеет вид
?- является_сестрой(алиса,X).
В ответ на вопрос Пролог выполняет следующие действия:
1. Вопрос сопоставляется с заголовком единственного правила для предиката является_сестрой.
Переменная X, входящая в это правило, конкретизируется значением алиса. Так как переменная X в запросе неконкретизирована, то и переменная Y в правиле также будет неконкретизированной. Однако эти две переменные теперь становятся2. Первая цель – женщина(алиса),
которая достигается так же, как и в предыдущем примере.3. Вторая цель – родители(алиса,М,F).
Эта цель сопоставляется с родители(алиса,виктория,альберт). Переменные M и F становятся конкретизированными.