Программирование на языке Пролог для искусственного интеллекта | страница 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:
>?- предок( том, пат)