- •Предисловие
 - •Глава 1 Введение в Пролог
 - •Глава 2 Синтаксис и унификация
 - •2.1. Синтаксис термы
 - •Константы
 - •Переменные
 - •Область действия переменных
 - •Сложные термы, или структуры
 - •Синтаксис операторов
 - •Синтаксис списков
 - •Синтаксис строк
 - •Утверждения
 - •Запросы
 - •Ввод программ
 - •2.2 Унификация
 - •Глава 3 Арифметические выражения
 - •3.1. Введение
 - •3.2. Арифметические выражения
 - •3.3. Арифметические операторы
 - •3.4. Вычисление арифметических выражений
 - •3.5. Сравнение результатов арифметических выражений
 - •Глава 4 Рекурсия
 - •4.1. Стратегия «разделяй и властвуй»
 - •Пример 4.1.1
 - •Фаза разбиения
 - •Фаза решения задачи
 - •4.2. Восходящая стратегия
 - •4.3. Рекурсия и эффективность
 - •Пример 4.3.2
 - •Глава 5 Структуры данных
 - •5.1. Списки списковая форма записи
 - •А на запрос
 - •Некоторые стандартные целевые утверждения для обработки списков
 - •5.2. Бинарные деревья представление бинарных деревьев
 - •Бинарное дерево на рис.5.2.1 имеет левое поддерево
 - •Представление множеств с помощью бинарных деревьев
 - •Будем называть линейным представление такого вида, как на рис.5.2.3, и сбалансированным - такое, как на рис.5.2.2.
 - •Левому поддереву соответствует отсортированный список
 - •Глава 6 Операторы
 - •6.1. Операторы и структуры синтаксис операторов
 - •Свойства операторов
 - •6.2. Позиция операторов
 - •6.3. Приоритет операторов
 - •6.4. Ассоциативность операторов
 - •6.5. Спецификаторы
 - •6.6. Операторы объявления
 - •6.7. Пример: вычисление многочленов
 - •6.8. Системные операторы
 - •Глава 7 Механизм возврата и процедурная семантика
 - •7.1. Механизм возврата
 - •7.2. Пример: задача поиска пути в лабиринте
 - •Целевое утверждение не удается согласовать с первым утверждением
 - •Если мы введем
 - •Если затем мы введем
 - •7.3. Обработка фактов с помощью механизма возврата
 - •7.4. Предикат repeat
 - •7.5. Декларативная и процедурная семантики
 - •Характеристики процедуры
 - •7.6. Вопросы эффективности
 - •Глава 8 Отсечение
 - •8.1. Почему используют отсечение?
 - •8.2. Использование отсечения
 - •Выдав запрос
 - •Обратившись к системе с запросом
 - •8.3. Ловушки отсечения
 - •Глава 9 Встроенные предикаты
 - •9.1. Встроенные предикаты
 - •9.2. Обновление базы данных Пролога
 - •Добавление и удаление утверждений
 - •Считывание утверждений в базу данных
 - •Предикаты сохранения и восстановления
 - •9.3. Особенности ввода и вывода чтение символов
 - •Запись символов
 - •Считывание термов Предикаты
 - •Запись термов
 - •9.4. Обработка файлов
 - •Редактирование программ на прологе
 - •Распечатка предикатов
 - •Глава 10 Модули. Пример разработки системы
 - •10.1. Модули
 - •Пример 10.1.1
 - •10.2. Пример разработки системы: деревья решений
 - •Описание дерева решений
 - •Разработка системы
 - •Целевое утверждение
 - •Глава 11 Отладка
 - •11.1. Трассировка
 - •Включение и выключение механизма трассировки
 - •Необязательные параметры трассировки
 - •Предикаты трассировки
 - •Режимы трассировки
 - •11.2. Установка контрольных точек
 - •Возможные действия в контрольной точке
 - •Включение и выключение режима контрольных точек
 - •Необязательные параметры режима контрольных точек
 - •Предикаты для работы с контрольными точками
 - •Режимы, связанные с контрольными точками
 - •Основные отладочные предикаты
 - •Статистическая информация
 
Утверждения
Программа на Прологе есть совокупность утверждений. Утверждения состоят из целей и хранятся в базе данных Пролога. Таким образом, база данных Пролога может рассматриваться как программа на Прологе. В конце утверждения ставится точка «.». Иногда утверждение называется предложением.
Основная операция Пролога - доказательство целей, входящих в утверждение.
Существуют два типа утверждений:
факт: это одиночная цель, которая, безусловно, истинна;
правило: состоит из одной головной цели и одной или более хвостовых целей, которые истинны при некоторых условиях.
Правило обычно имеет несколько хвостовых целей в форме конъюнкции целей.
Конъюнкцию можно рассматривать как логическую функцию И. Таким образом, правило согласовано, если согласованы все его хвостовые цели.
Примеры фактов:
собака(рекс).
родитель(голди,рекс).
Примеры правил:
собака(Х) :- родитель(Х,У),собака (Y).
человек(Х) :- мужчина(Х).
Разница между правилами и фактами чисто семантическая. Хотя для правил мы используем синтаксис операторов (см. гл. 6), нет никакого синтаксического различия между правилом и фактом.
Так , правило
собака(Х) :- родитель (X,Y), собака (Y).
может быть задано как
:-собака(Х) ',' родитель(Х,Y),собака (Y).
Запись верна, поскольку :- является оператором «при условии, что», а ',' - это оператор конъюнкции.
Однако удобнее записывать это как
собака(Х) :- родитель(Х,Y),собака (Y).
и читать следующим образом: « Х - собака при условии, что родителем Х является Y и Y - собака».
Структуру иногда изображают в виде дерева, число ветвей которого равно арности структуры.

Запросы
После записи утверждений в базу данных вычисления могут быть инициированы вводом запроса.
Запрос выгладит так же, как и целевое утверждение, образуется и обрабатывается по тем же правилам, но он не входит в базу данных (программу). В Прологе вычислительная часть программы и данные имеют одинаковый синтаксис. Программа обладает как декларативной, так и процедурной семантикой. Мы отложим обсуждение этого вопроса до последующих глав. Запрос обозначается в Прологе утверждением ?-, имеющим арность 1. Обычно запрос записывается в операторной форме: за знаком ?- следует ряд хвостовых целевых утверждений (чаще всего в виде конъюнкции).
Приведем примеры запросов:
?-собака(X).
?- родитель(Х,Y),собака (Y).
или, иначе,
'?-'(собака(Х))
('?-') ',' (родитель(Х, Y),собака (Y)).
Последняя запись неудобна тем, что разделитель аргументов в структуре совпадает с символом конъюнкции. Программисту нужно помнить о различных значениях символа ','.
Запрос иногда называют управляющей командой (директивой), так как он требует от Пролог-системы выполнения некоторых действий. Во многих реализациях Пролога для управляющей команды используется альтернативный символ, а символ ?- обозначает приглашение верхнего уровня интерпретатора Пролога. Альтернативным символом является :-. Таким образом,
:-write (собака).
- это управляющая команда, в результате выполнения которой печатается атом собака. Управляющие команды будут рассмотрены ниже при описании ввода программ.
