Программирование на языке Пролог для искусственного интеллекта | страница 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, отношение