
- •Предисловие
- •Глава 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. Установка контрольных точек
- •Возможные действия в контрольной точке
- •Включение и выключение режима контрольных точек
- •Необязательные параметры режима контрольных точек
- •Предикаты для работы с контрольными точками
- •Режимы, связанные с контрольными точками
- •Основные отладочные предикаты
- •Статистическая информация
11.2. Установка контрольных точек
В процессе отладки иногда возникает необходимость приостановить работу программы при доказательстве каждой цели. В Прологе для этого имеется средство, называемое методом контрольных точек.
Применение контрольных точек дает возможность пользователю остановить выполнение программы при переходе к новой цели, проверить состояние параметров и, возможно, воздействовать на дальнейший процесс доказательства.
Метод контрольных точек аналогичен пошаговому режиму выполнения команд, применяемому при разработке программ на языке Ассемблера.
Возможные действия в контрольной точке
Возможности, имеющиеся в контрольной точке, зависят от реализации Пролога, но в общем их можно свести к следующим:
a (abort/прекратить) - вернуться на верхний уровень интерпретатора;
b (backtrace/вернуться назад) - показать последние N выполненных целевых утверждений;
f (fail/неудача) - установить результат «неудача» при доказательстве текущей цели;
s (succeed/успе綮) - установить результат «успех» при доказательстве текущей цели.
Включение и выключение режима контрольных точек
При первой загрузке системы Пролог режим установки контрольных точек обычно бывает отключен. Впоследствии он может быть включен одним из способов, зависящих от реализации Пролога.
Приведем два типичных метода включения режима контрольных точек.
1. Использование механизма прерывания с клавиатуры, например одновременное нажатие клавиш CTRL и S. Повторное нажатие клавиш CTRL и S приводит к отключению режима контрольных точек. Программист имеет возможность применить данный метод при разработке программы за терминалом.
2. Применение предиката spy для включения режима контрольных точек и предиката nospy для выключения. Данный метод служит для проверки отдельных частей программы. Предикат spy необходимо вставить в программу непосредственно перед проверяемым участком, а предикат nospy - сразу после него.
В результате выполнение программы будет приостанавливаться на каждом целевом утверждении из последовательности, находящейся между этими двумя предикатами.
Если происходит повторный запуск Пролог-системы после возникновения ошибки или выполнения операции прерывания в контрольной точке, режим контрольных точек обычно отключается.
Предикаты, содержащие контрольные точки, могут запоминаться системой и выдаваться при включении соответствующего режима.
Необязательные параметры режима контрольных точек
Кроме общих параметров режима контрольных точек, рассмотренных ранее, некоторые реализации Пролога поддерживают специальные параметры. Если это необходимо, пользователю разрешается подключать контрольные точки к любому предикату в своей программе. После присоединения контрольных точек пользователь включает режим контрольных точек, который прерывает выполнение программы только в тот момент, когда целевыми утверждениями становятся предикаты с контрольными точками. Благодаря этому программы на Прологе выполняются обычным образом (за исключением скорости выполнения) между целевыми утверждениями с контрольными точками.