Для всех 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 должно быть записано следующим образом: