Эта (новая) цель достигается тривиально, поскольку такой факт можно найти в нашей программе. Это означает, что утверждение, содержащееся в выводе правила, также истинно, и система ответит на вопрос yes (да).

Добавим теперь в нашу программу-пример еще несколько родственных отношений. Определение отношения мать может быть основано на следующем логическом утверждении:

        Для всех X и Y

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

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

                Х - женщина.

На Пролог это переводится в виде такого правила:

        мать( X, Y) :- родитель( X, Y), женщина( X).

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

Рис. 1. 3.  Графы отношений родительродителя, мать и отпрыск,

определенных через другие отношения.

Такие отношения как родитель, отпрыск и мать можно изобразить в виде диаграмм, приведенных на рис. 1.3. Они нарисованы с учетом следующих соглашений. Вершины графа соответствуют объектам, т.е. аргументам отношений. Дуги между вершинами соответствуют бинарным (двуместным) отношениям. Дуги направлены от первого аргумента к второму. Унарные отношения на диаграмме изображаются просто пометкой соответствующих объектов именем отношения. Отношения, определяемые через другие отношения, представлены штриховыми дугами. Таким образом, любую диаграмму следует понимать так: если выполнены отношения, изображенные сплошными дугами, тогда и отношение, изображенное штриховой дугой, тоже выполнено. В соответствии с рис. 1.3, отношение родительродителя можно сразу записать на Прологе:

        родительродителя( X, Z) :- родитель( X, Y),

                                                        родитель( Y, Z).

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

        родительродителя( X, Z) :-

                родитель( X, Y),

                родитель( Y, Z).

На рис. 1.4 показано отношение сестра:

    Для любых X и Y

         X является сестрой Y, если

         (1)        у X и Y есть общий родитель, и

         (2)        X - женщина.

Рис. 1. 4.  Определение отношения сестра.

Граф на рис. 1.4 можно перевести на Пролог так:

        сестра( X, Y) :-

Вы читаете Prolog
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату