Программирование на языке Пролог | страница 21
?- является_сестрой(алиса,X).
В ответ на вопрос Пролог выполняет следующие действия:
1. Вопрос сопоставляется с заголовком единственного правила для предиката является_сестрой. Переменная X, входящая в это правило, конкретизируется значением алиса. Так как переменная X в запросе неконкретизирована, то и переменная Y в правиле также будет неконкретизированной. Однако эти две переменные теперь становятся сцепленными. Как только одной из переменных присваивается некоторое значение, другая переменная становится конкретизированной тем же самым значением. Конечно, в данный момент они неконкретизированы.
2. Первая цель – женщина(алиса), которая достигается так же, как и в предыдущем примере.
3. Вторая цель – родители(алиса,М,F). Эта цель сопоставляется с родители(алиса,виктория,альберт). Переменные M и F становятся конкретизированными.
4. Так как переменная Y пока неизвестна, то третьей целью будет родители(Y,виктория,альберт), и она сопоставляется с родители(эдуард, виктория,альберт). Переменная Y конкретизируется значением эдуард.
5. Так как все целевые утверждения согласованы с базой данных, то тем самым согласовано и правило в целом, при этом переменная X (как известно из вопроса) равна алиса и Y равна эдуард. Учитывая, что Y (в правиле) является сцепленной с X (в вопросе), то X также конкретизирована значением эдуард. Пролог печатает Х=эдуард.
Как обычно, Пролог ожидает, пока вы сообщите ему, хотите ли вы найти все ответы на вопрос. Оказывается, что на данный вопрос имеется более одного ответа. Как Пролог находит оставшиеся ответы (ответ), является содержанием упражнения, приведенного в конце главы.
Как мы видели до сих пор, существуют два способа предоставить Прологу информацию относительно предиката, подобного предикату нравится. Мы можем сделать это, используя как факты, так и правила. В общем случае предикат будет определен смесью фактов и правил. Эти факты и правила, определяющие предикат, называются утверждениями>[4]. Мы будем использовать слово утверждение в случаях, когда мы ссылаемся либо на факт, либо на правило.
В качестве следующего примера, на этот раз не имеющего отношения к монархам, рассмотрим правило: Человек может украсть что-либо, если этот человек вор и ему нравится вещь и эта вещь является ценной. На Прологе это записывается следующим образом:
может_украсть(P,T:- вор(P), нравится(P,T), ценный(T).
Предикат может_украсть, который имеет две переменные P и