Программирование на языке Пролог для искусственного интеллекта | страница 12
• условную часть (правая половина правила) и
• часть вывода (левая половина правила).
Вывод называют также головой предложения, а условную часть — его телом. Например:
>отпрыск( Y, X) :- родитель( X, Y).
>голова тело
Если условие >родитель( X, Y)
выполняется (оно истинно), то логическим следствием из него является утверждение >отпрыск( Y, X)
.
На приведенном ниже примере проследим, как в действительности правила используются Прологом. Спросим нашу программу, является ли Лиз отпрыском Тома:
>?- отпрыск( лиз, том).
В программе нет фактов об отпрысках, поэтому единственный способ ответить на такой вопрос — это применить правило о них. Правило универсально в том смысле, что оно применимо к любым объектам X и Y, следовательно, его можно применить и к таким конкретным объектам, как >лиз
и >том
. Чтобы это сделать, нужно вместо >Y
подставить в него >лиз
, а вместо >X
— >том
. В этом случае мы будем говорить, что переменные X и Y конкретизируются:
>X = том
и >Y = лиз
После конкретизации мы получаем частный случай нашего общего правила. Вот он:
>отпрыск( лиз, том) :- родитель( том, лиз).
Условная часть приняла вид:
>родитель( том, лиз)
Теперь пролог-система попытается выяснить, выполняется ли это условие (является ли оно истинным). Для этого исходная цель
>отпрыск( лиз, том)
заменяется подцелью
>родитель( том, лиз)
Эта (новая) цель достигается тривиально, поскольку такой факт можно найти в нашей программе. Это означает, что утверждение, содержащееся в выводе правила, также истинно, и система ответит на вопрос >yes
(да).
Добавим теперь в нашу программу-пример еще несколько родственных отношений. Определение отношения >мать
может быть основано на следующем логическом утверждении:
Для всех X и Y
X является матерью Y, если
X является родителем Y и
X — женщина.
На Пролог это переводится в виде такого правила:
>мать( X, Y) :- родитель( X, Y), женщина( X).
Запятая между двумя условиями указывает на конъюнкцию условий. Это означает, что они должны быть выполнены оба одновременно.
Рис. 1.3. Графы отношений >родительродителя
, >мать
и >отпрыск
, определенных через другие отношения.
Такие отношения как >родитель
, >отпрыск
и >мать
можно изобразить в виде диаграмм, приведенных на рис. 1.3. Они нарисованы с учетом следующих соглашений. Вершины графа соответствуют объектам, т.е. аргументам отношений. Дуги между вершинами соответствуют бинарным (двуместным) отношениям. Дуги направлены от первого аргумента к второму. Унарные отношения на диаграмме изображаются просто пометкой соответствующих объектов именем отношения. Отношения, определяемые через другие отношения, представлены штриховыми дугами. Таким образом, любую диаграмму следует понимать так: если выполнены отношения, изображенные сплошными дугами, тогда и отношение, изображенное штриховой дугой, тоже выполнено. В соответствии с рис. 1.3, отношение