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




Пример программы: родственные отношения - часть 2


Программа ответит "нет" и на вопрос

        ?-  родитель( том, бен).

потому, что имя Бен в программе даже не упоминается.

Можно задавать и более интересные вопросы. Например:"Кто является родителем Лиз?"

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

На этот раз система ответит не просто "да" или "нет". Она скажет нам, каким должно быть значение X (ранее неизвестное), чтобы вышеприведенное утверждение было истинным. Поэтому мы получим ответ:

        X  =  том

Вопрос "Кто дети Боба?" можно передать пролог-системе в такой форме:

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

В этом случае возможно несколько ответов. Сначала система сообщит первое решение:

        X  =  энн

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

        X  =  пат

Если мы потребуем дальнейших решений, система ответит "нет", поскольку все решения исчерпаны.

Нашей программе можно задавать и более общие вопросы: "Кто чей родитель?" Приведем другую формулировку этого вопроса:

        Найти X и Y такие, что X - родитель Y.

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

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

Система будет по очереди находить все пары вида "родитель-ребенок". По мере того, как мы будем требовать от системы новых решений, они будут выводиться на экран одно за другим до тех пор, пока все они не будут найдены. Ответы выводятся следующим образом:

        X  =  пам
        Y  =  боб;

        X  =  том
        Y  =  боб;




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