Программирование на языке Пролог для искусственного интеллекта




Расширение программы-примера с помощью правил - часть 5


в соответствии с этими соглашениями запишется так:

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

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

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

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

    Для любых X и Y

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

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

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

fig1_4.gif (1120 bytes)

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

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

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

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

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

                женщина( X).

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

Теперь можно спросить:

       ?-  сестра( энн, пат).

Как и ожидается, ответ будет "yes" (да) (см. рис. 1.1). Мы могли бы заключить отсюда, что определенное нами отношение сестра

работает правильно. Тем не менее в нашей программе есть маленькое упущение, которое обнаружится, если задать вопрос: "Кто является сестрой Пат?"

       ?-  сестра( X, пат).

Система найдет два ответа, один из которых может показаться неожиданным:




Содержание  Назад  Вперед