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



Благодарности

Интерес к Прологу впервые возник у меня под влиянием Дональда Мики. Я благодарен также Лоренсу Берду, Фернандо Перейра и Дэвиду Г. Уоррену, входившим в свое время в эдинбургскую группу разработчиков Пролога, за их советы по составлению программ и многочисленные дискуссии. Чрезвычайно полезными были замечания и предложения, высказанные Эндрью Макгеттриком и Патриком Уинстоном. Среди прочитавших рукопись книги и сделавших ценные замечания были также Игорь Кононенко, Таня Маярон, Игорь Мозетик, Тимоти Ниблетт и Фрэнк Зердин. Мне бы хотелось также поблагодарить Дебру Майсон-Этерингтон и Саймона Пламтри из издательства Эддисон-Уэсли за труд, вложенный в издание этой книги. И наконец, эта книга не могла бы появиться на свет без стимулирующего влияния творческой деятельности всего международного сообщества специалистов по логическому программированию.

Иван Братко
Институт Тьюринга, Глазго
Январь 1986 

Часть 1

Язык Пролог

Глава 1

Общий обзор языка Пролог

В этой главе на примере конкретной программы рассматриваются основные механизмы Пролога. Несмотря на то, что материал излагается в основном неформально, здесь вводятся многие важные понятия.

1.1. Пример программы: родственные отношения

Пролог — это язык программирования, предназначенный для обработки символьной нечисловой информации. Особенно хорошо он приспособлен для решения задач, в которых фигурируют объекты и отношения между ними. На рис. 1.1 представлен пример — родственные отношения. Тот факт, что Том является родителем Боба, можно записать на Прологе так:

>родитель( том, боб).

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

>родитель( пам, боб).

>родитель( том, боб).

>родитель( том, лиз).

>родитель( боб, энн).

>родитель( боб, пат).

>родитель( пам, джим).

Рис. 1.1.  Дерево родственных отношений.

Эта программа содержит шесть предложений. Каждое предложение объявляет об одном факте наличия отношения >родитель.

После ввода такой программы в пролог-систему последней можно будет задавать вопросы, касающиеся отношения >родитель. Например, является ли Боб родителем Пат? Этот вопрос можно передать пролог-системе, набрав на клавиатуре терминала:

>?-  родитель( боб, пат).

Найдя этот факт в программе, система ответит