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



" и ">*/". Таким образом, прологовский комментарий выглядит так

>/* Это комментарий */

Другой способ, более практичный для коротких комментариев, использует символ процента >%. Все, что находится между >% и концом строки, расценивается как комментарии:

>% Это тоже комментарий

Упражнение

1.6. Рассмотрим другой вариант отношения предок:

>предок( X, Z) :-

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

>предок( X, Z) :-

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

> предок( X, Y).

Верно ли и такое определение? Сможете ли Вы изменить диаграмму на рис. 1.7 таким образом, чтобы она соответствовала новому определению?

1.4. Как пролог-система отвечает на вопросы

В данном разделе приводится неформальное объяснение того, как пролог-система отвечает на вопросы.

Вопрос к системе — это всегда последовательность, состоящая из одной или нескольких целей. Для того, чтобы ответить на вопрос, система пытается достичь всех целей. Что значит достичь цели? Достичь цели — это значит показать, что утверждения, содержащиеся в вопросе, истинны в предположении, что все отношения программы истинны. Другими словами, достичь цели - это значит показать, что она логически следует из фактов и правил программы. Если вопрос содержит переменные, система должна к тому же найти конкретные объекты, которые (будучи подставленными вместо переменных) обеспечивают достижение цели. Найденные конкретизации сообщаются пользователю. Если для некоторой конкретизации система не в состоянии вывести цель из остальных предложений программы, то ее ответом на вопрос будет "нет".

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

Проиллюстрируем этот подход на классическом примере. Пусть имеются следующие аксиомы:

 Все люди смертны.

 Сократ — человек.

Теорема, логически вытекающая из этих двух аксиом:

 Сократ смертен.

Первую из вышеуказанных аксиом можно переписать так:

 Для всех X, если X — человек, то X смертен.

Соответственно наш пример можно перевести на Пролог следующим образом:

>смертен( X) :- человек( X). % Все люди смертны

>человек( сократ).           % Сократ - человек

>?-  смертен( сократ).       % Сократ смертен?

>yes                   (да)

Более сложный пример из программы о родственных отношениях, приведенной на рис. 1.8:

>?- предок( том, пат)