(1)    Кто родитель Джима?   Предположим, что это некоторый Y.

(2)    Кто родитель Y?   Предположим, что это некоторый X.

Такой составной вопрос на Прологе записывается в виде последовательности двух простых вопросов:

?-  родитель( Y, джим), родитель( X, Y).

Ответ будет:

X  =  боб

Y  =  пат

Рис. 1.2. Отношение родительродителя, выраженное через композицию двух отношений родитель.

Наш составной вопрос можно интерпретировать и так: "Найти X и Y, удовлетворяющие следующим двум требованиям":

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

Если мы поменяем порядок этих двух требований, то логический смысл останется прежним:

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

Этот вопрос можно задать нашей пролог-системе и в такой форме:

?-  родитель( X, Y), родитель( Y, джим).

При этом результат будет тем же. Таким же образом можно спросить: "Кто внуки Тома?"

?-  родитель( том, X), родитель( X, Y).

Система ответит так:

X  =  боб

Y  =  энн;

X  =  боб

Y  =  пат

Следующим вопросом мог бы быть такой: "Есть ли у Энн и Пат общий родитель?" Его тоже можно выразить в два этапа:

(1)    Какой X является родителем Энн?

(2)    Является ли (тот же) X родителем Пат?

Соответствующий запрос к пролог-системе будет тогда выглядеть так:

?-  родитель( X, энн), родитель( X, пат).

Ответ:

X  =  боб

Наша программа-пример помогла проиллюстрировать некоторые важные моменты:

• На Прологе легко определить отношение, подобное отношению родитель, указав n-ку объектов, для которых это отношение выполняется.

• Пользователь может легко задавать пролог-системе вопросы, касающиеся отношений, определенных в программе.

• Пролог-программа состоит из предложений. Каждое предложение заканчивается точкой.

• Аргументы отношения могут быть (среди прочего): конкретными объектами, или константами (такими, как том и энн), или абстрактными объектами, такими, как X и Y. Объекты первого типа называются атомами. Объекты второго типа — переменными.

• Вопросы к системе состоят из одного или более целевых утверждений (или кратко целей). Последовательность целей, такая как

родитель( X, энн), родитель( X, пат)

означает конъюнкцию этих целевых утверждений:

X  —  родитель Энн   и

X  —  родитель Пат.

Пролог-система рассматривает вопросы как цели, к достижению которых нужно стремиться.

• Ответ на вопрос может оказаться или положительным или отрицательным в зависимости от того, может ли быть соответствующая цель достигнута или нет. В случае положительного ответа мы говорим, что соответствующая цель достижима и успешна. В противном случае цель   недостижима,   имеет неуспех   или   терпит неудачу.

• Если на вопрос существует несколько ответов, пролог-система найдет столько из них, сколько пожелает пользователь.

Упражнения

1.1. Считая, что отношение родитель определено так же, как и раньше в данном разделе (см. рис. 1.1), найдите, какими будут ответы пролог-системы на следующие вопросы:

(a)  ?-  родитель( джим, X).

(b)  ?-  родитель( X, джим).

(c)  ?-  родитель( пам,X), родитель( X, пат).

(d)  ?-  родитель( пам, X), родитель( X, Y),

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

1.2.  Сформулируйте на Прологе следующие вопросы об отношении родитель:

(a)  Кто родитель Пат?

(b)  Есть ли у Лиз ребенок?

(c)  Кто является родителем родителя Пат? 

<p>1.2. Расширение программы-примера с помощью правил</p>

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

женщина( пам).

мужчина( том).

мужчина( боб).

женщина( лиз).

женщина( пат).

женщина( энн).

мужчина( джим).

Мы ввели здесь два новых отношения — мужчина и женщина. Эти отношения — унарные (или одноместные). Бинарное отношение, такое как родитель, определяет отношение между двумя объектами; унарные же можно использовать для объявления наличия (отсутствия) простых свойств у объектов. Первое из приведенных выше предложений читается так: Пам — женщина. Можно было бы выразить информацию, представляемую этими двумя унарными отношениями (мужчина и женщина), по-другому - с помощью одного бинарного отношения пол. Тогда новый фрагмент нашей программы выглядел бы так:

пол( пам, женский).

пол( том, мужской).

пол( боб, мужской).

...

Перейти на страницу:

Похожие книги