Для всех X и Y,

X является матерью Y, если

X является одним из родителей Y и

X - женщина,

Это утверждение можно перевести на язык Prolog в виде следующего правила:

mother! x, Y) :-parentC x, Y), female(X}.

Запятая между двумя условиями указывает на конъюнкцию этих условий; это означает, что оба условия должны быть истинными.

Такие отношения, как parent, offspring и mother., можно проиллюстрировать с помощью схем, подобных приведенным на рис. 1.3. Эти схемы соответствуют сле­дующим соглашениям. Узлы графов относятся к объектам, т.е. параметрам отноше­ний. Дуги между узлами соответствуют бинарным (или двухместным) отношениям. Дуги направлены от первого параметра отношения ко второму. Унарные отношения обозначаются на схемах путем проставления отметки на соответствующих объектах с именем отношения. Отношения, которые определены на основе других отношений, представлены в виде пунктирных дуг. Поэтому каждую схему необходимо интерпре­тировать следующим образом: если соблюдаются отношения, обозначенные сплош­ными дугами, то соблюдаются и созданные на их основе отношения, обозначенные пунктирными дугами. Согласно рис. 1.3, отношение grandparent можно непосред­ственно записать на языке Prolog следующим образом: grandparent! X, Z) :- parent t X, Y) , parentt Y, Z).



Y 1 grandparent

parent

Ex 0-r

, offspring parent


Рис. 1.3. Графы, которые определяют отношения .iffspringmother u grandparente терминах других отношений

На данном этапе необходимо кратко рассмотреть вопрос о компоновке программ. Система Prolog предоставляет почти полную свободу выбора компоновки программ. Поэтому программист может вставлять в текст программы пробелы и пустые строки в полном соответствии со своими вкусами. Но, как правило, следует стремиться к тому, чтобы программы выглядели четкими и аккуратными и, самое главное, были удобными для чтения. Для этого чаще всего голова предложения и каждая цель в его теле записываются на отдельной строке. При этом желательно обозначать цели от­ступом, чтобы различия между головой и целями стали более очевидными. Напри­мер, в соответствии с этими соглашениями правило grandparent должно быть запи­сано следующим образом: