Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Часть I. Язык Prolog





 


grandparent; X, Z):-parent (X, Y), parent (Y, Z).

Схема отношения sister (рис. 1.4) имеет следующее определение:

Для любого X и Y

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

1) X и Y имеют общего родителя и

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

parent / \ parent

female f X J —{ Y)

sister

Рис, 1.4. Определение от­ношения sister

Граф, представленный на рис. 1.4, можно перевести на язык Prolog следующим образом: sister(X, Y):~parent (Z, X), parent* Z, 1), female<X>.

Обратите внимание на то, каким способом было выражено требование "X и Y имеют общего родителя". Для этого использовалась следующая логическая форму­лировка: некоторый Z должен быть родителем X, и тот ж& Z должен быть ро­дителем Y. Альтернативный, но менее изящный способ мог предусматривать ис­пользование следующей цепочки утверждений: 21 является родителем X, Z2 яв­ляется родителем Y к Z1 равно Z2.

Теперь системе можно задать вопрос:?- sister< arm, pat).

Ответом должно быть "yes", как и следовало ожидать (см. рис. 1.1). Поэтому можно сделать вывод, что отношение sister в том виде, в каком оно определено, действует правильно. Но в рассматриваемой программе имеется незаметный на пер­вый взгляд недостаток, который обнаруживается при получении ответа на вопрос о том, кто является сестрой Пэт:?- sister {X, pat).

Prolog находит два ответа, и один из них может оказаться неожиданным.

X ■- arm; X - pat

Итак, Пэт является сестрой самой себя?! По-видимому, такой исход не подразу­мевался при определении отношения sister. Но согласно правилу, касающемуся сестер, ответ системы Prolog является полностью обоснованным. В правиле о сестрах нет упоминания о том, что X и Y не должны быть одинаковыми, если X рассматрива­ется как сестра Y. Поскольку это требование не предъявляется, система Prolog (вполне обоснованно) предполагает, что X и Y могут быть одинаковыми, и поэтому приходит к заключению, что любая женщина, имеющая родителя, является сестрой самой себя.

Чтобы исправить приведенное выше правило о сестрах, необходимо дополнитель­но указать, что X и Y должны быть разными. Как показано в следующих главах, та­кую задачу можно решить несколькими способами, но на данный момент предполо­жим, что системе Prolog уже известно отношение differentи условие different (X, Y)


Глава 1. Введение в Prolog



удовлетворяется, если и только если X и Y не равны. Поэтому усовершенствованное правило для отношения sister может выглядеть следующим образом: sister) X, Y):-

parent (Z, x':

female! X), different (X Y). На основании изложенного в этом разделе можно сделать следующие важные вы­воды.

• Программы Prolog можно дополнять, вводя новые предложения.

• Предложения Prolog относятся к трем типам: факты, правила и вопросы.

• С помощью фактов можно вводить в программу сведения, которые всегда и безусловно являются истинными.

• С помощью правил можно вводить в программу сведения, которые являются истинными в зависимости от заданного условия,

• Задавая программе вопросы, пользователь может узнавать, какие сведения яв­ляются истинными.

• Предложения языка Prolog состоят из головы и тела. Тело представляет собой список целей, разделенных запятыми. Запятые рассматриваются как знаки конъюнкции.

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

• В процессе вычисления переменные можно заменять другими объектами. В таком случае переменная становится конкретизированной.

• Предполагается, что на переменные распространяется действие квантора все­общности, который имеет словесное выражение "для всех". Но если перемен­ные появляются только в теле, их можно трактовать несколькими способами. Например, предложение

hasachildi X):- parent (X, Y).

можно прочитать двумя приведенными ниже способами. а) Для всех х и Y,

если X является родителем Y, то X имеет ребенка. С) Для всех X,

X имеет ребенка, если

существует некоторый Y, такой, что X является родителем Y.

Упражнения

1.3. Преобразуйте приведенные ниже утверждения в правила Prolog.

а) Каждый, кто имеет ребенка, счастлив (введите отношение happy с одним
параметром).

б) Для всех X, если X имеет ребенка, имеющего сестру, то X имеет двоих детей
(введите новое отношение hastwochildren).

1.4. Определите отношение grandchild с использованием отношения parent. Под­сказка: оно должно быть аналогично отношению grandparent (см. рис. 1.8).

1.5. Определите отношение aunt (X, Y) в терминах отношений parent и sister. Для упрощения этой задачи вы можете вначале нарисовать схему для отноше­ния, определяющего понятие aunt (тетя), в стиле рис. 1.3.

34 Часть I. Язык Prolog






Поделиться с друзьями:


Дата добавления: 2015-10-01; Мы поможем в написании ваших работ!; просмотров: 611 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Своим успехом я обязана тому, что никогда не оправдывалась и не принимала оправданий от других. © Флоренс Найтингейл
==> читать все изречения...

2395 - | 2206 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.