Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
IIS / Печень О.А / Тема 2 / ЛР 2 1 - Prolog знакомство.doc
Скачиваний:
30
Добавлен:
31.03.2015
Размер:
204.8 Кб
Скачать
  1. Отладка и трассировка программ

 Введенная или загруженная с диска Пролог-программа после выбора в главком меню команды Вып запускается системой на компиляцию и выполнение. Но прежде, чем программа начнет выполняться, она проверяется на соответствие синтаксисуТурбо-Пролога, отсутствие смешения значений из разных областей типов данных. Если при компиляции обнаруживается ошибка, то соответствующее сообщение появляется в нижней строке окна редактора и курсор в окне редактирования указывает на место ошибки.

Если программа успешно откомпилирована и система ожидает задание внешней цели для выполнения, то следующей стадией отладки является выбор таких целей, чтобы программа тестировалась для достаточно широкого набора исходных данных.

При возникновении непредвиденных ситуаций следует перейти на пошаговую трассировку программы. Для этого в текст программы вводится директива trace, которая может быть вставлена в программу перед секцией predicates.

При выполнении программы, содержащей директиву trace, в окне "Трассировка" по очереди выводятся все цели и утверждения программы, используемые в процессе ее выполнения. Это позволяет следить за ходом выполнения программы, переходами от одной цели к другой, за процессом поиска с возвратом.

Переход от выполнения одной цели к другой обеспечивается нажатием клавиши F10. Нажатие клавиши F10 вызывает выполнение текущей цели. После ее нажатия, следующая цель выводится в окне "Трассировка", и так шаг за шагом. Директива trace показывает полную информацию, устраняя при этом различные оптимизации, выполняемые компилятором.

Например, trace препятствует автоматическому уничтожению рекурсии, так, что можно наблюдать все возвраты (RETURN) предиката. Пример диалога с компьютером при выполнении запроса в режиме пошаговой трассировки приведен на рис. 1. При выполнении пошаговой трассировки в окне "Трасс" системой программирования Турбо-Пролог могут выдаваться следующие сообщения:

Сообщение системы

Пояснение к сообщению системы

CALL

Каждый раз при вызове предиката в окне "Трасс" отображаются имя предиката и значения его параметров

RETURN

Это сообщение выводится в окне слежения, когда предложение выполнилось и предикат возвращает управление вызвавшему его предикату. Если существуют дальнейшие предложения, которые удовлетворяют входным параметрам, отобразится символ звездочка для указания того, что данное предложение находится в точке поиска с возвратом.

FAIL

Когда предикат не достиг успеха, отображается слово FAIL, за которым следует имя данного предиката.

REDO

Указывает на то, что имеет место поиск с возвратом. Имя предиката, который повторно выполняется, вместе со значениями его параметров отображается в окне слежения.

Когда трассируется большая программа, содержащая много предикатов, то ее можно отлаживать, управляя трассировкой. Если, например, уже известно, что предикат old_predicat(...) работает успешно, то утверждение для предиката

new_predicat(...) :- old_predicat(...) , new_goal(...) , ...

может быть переопределено таким образом:

new_predicat(...) :- trace(off) , old_predicat(...) , tracc(on) , new_goal(...) , ...

и трассировка пойдет быстрее.

Другой возможностью управлять информацией, выводимой при трассировке, является обращение к предикатам трассировки в форме

trace predicate1, predicate2, predicate3, ...

которое выводит результаты обращений (CALL) u возвратов (RETURN) только для перечисленных в директиве trace предикатов predicate1, predicate2, predicate3 и т.д.