Программирование на языке Пролог для искусственного интеллекта | страница 11
(d) >?- родитель( пам, X), родитель( X, Y),
> родитель( Y, джим).
1.2. Сформулируйте на Прологе следующие вопросы об отношении >родитель
:
(a) Кто родитель Пат?
(b) Есть ли у Лиз ребенок?
(c) Кто является родителем родителя Пат?
1.2. Расширение программы-примера с помощью правил
Нашу программу-пример можно легко расширить многими интересными способами. Давайте сперва добавим информацию о том, каков пол людей, участвующих в отношении >родитель
. Это можно сделать, просто добавив в нее следующие факты:
>женщина( пам).
>мужчина( том).
>мужчина( боб).
>женщина( лиз).
>женщина( пат).
>женщина( энн).
>мужчина( джим).
Мы ввели здесь два новых отношения — >мужчина
и >женщина
. Эти отношения — унарные (или одноместные). Бинарное отношение, такое как >родитель
, определяет отношение между двумя объектами; унарные же можно использовать для объявления наличия (отсутствия) простых свойств у объектов. Первое из приведенных выше предложений читается так: Пам — женщина. Можно было бы выразить информацию, представляемую этими двумя унарными отношениями (>мужчина
и >женщина
), по-другому - с помощью одного бинарного отношения >пол
. Тогда новый фрагмент нашей программы выглядел бы так:
>пол( пам, женский).
>пол( том, мужской).
>пол( боб, мужской).
>...
В качестве дальнейшего расширения нашей программы-примера давайте введем отношение >отпрыск
, которое обратно отношению >родитель
. Можно было бы определить >отпрыск
тем же способом, что и >родитель
, т.е. представив список простых фактов наличия этого отношения для конкретных пар объектов, таких, что один является отпрыском другого. Например:
>отпрыск( лиз, том).
Однако это отношение можно определить значительно элегантнее, использовав тот факт, что оно обратно отношению >родитель
, которое уже определено. Такой альтернативный способ основывается на следующем логическом утверждении:
Для всех X и Y
Y является отпрыском X, если
X является родителем Y.
Эта формулировка уже близка к формализму, принятому в Прологе. Вот соответствующее прологовское предложение, имеющее тот же смысл:
>отпрыск( Y, X) :- родитель( X, Y).
Это предложение можно прочитать еще и так:
Для всех X и Y,
если X — родитель Y, то
Y — отпрыск X.
Такие предложения Пролога, как
>отпрыск( Y, X) :- родитель( X, Y).
называются правилами. Есть существенное различие между фактами и правилами. Факт, подобный факту
>родитель( том, лиз).
это нечто такое, что всегда, безусловно истинно. Напротив, правила описывают утверждения, которые могут быть истинными, только если выполнено некоторое условие. Поэтому можно сказать, что правила имеют