Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по языку Пролог.doc
Скачиваний:
83
Добавлен:
28.06.2014
Размер:
507.39 Кб
Скачать

6.2. Трассировка

Когда система поверит, что программа синтаксически правильна, она будет успешно откомпилирована. При этом Турбо Пролог поддержи­вает уникальные средства отладки и трассировки для эффективной разработки программы.

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

Если в ответ на запрос будет получен неожиданный результат, то необходимо сделать третий шаг в цикле отладки - трассировку програм­мы. При трассировке в окнах Trace (Трассировка), Edit (Редактор) и Dialog (Диалог) выводится пошаговая информация о том, как выполняет­ся программа.

6.2.1. Директивы трассировки

Для трассировки программы в заголовке программы нужно поместить директиву компилятора trace (или выбрать trace из меню Option/ Compiler Directives/Trace).

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

Таблица 6.1

CALL

Когда вызывается предикат, его имя и значения его параметров выводятся в окне Trace.

RETURN

Когда предикат (или правило) удовлетворяется, в окне Trace выводится RETURN и возвращаемый предикат. Если имеются другие предложения, соответствующие входным пара­метрам, то появляется изображение звездочки (*), пока­зывающее, что имел место поиск с возвратом (недетермини­рованный).

FAIL

Когда предикат не удовлетворяется, перед именем неудачно Завершившегося предиката появляется слово FAIL.

REDO

REDO показывает, что произведен поиск с возвратом. Имя повторно выполняющегося предиката появляется в окне Trace наряду со значениями его параметров.

Пример (Рис 6.1). Этот пример демонстрирует использование ди­рективы компилятора trace. Загрузите программу, а затем для запуска программы нажмите клавиши Alt-R

trace

domains

list = element *

element = symbol

Files Edit Ru Cornpile Option Setup

Editor

Dialog

Error Correction Line18 Col33 C: EXAMPLES

predicates

make_list( integer, list, list)

goal

make_list( 1, [ 1,2], New_List).

clauses

make_list(Head. List, [Head,List]).

505 Type error: Illegal variable type For this position.

Message

Trace

Load WORK. PRO

Load С: ЕХАMPLES\CHOI.РRO

Compiling C: EXAMLES\CHOI.

F1: Error explanation F2-Save F3-Load F5-Zoow F6-Next F10-Continue

F1: Error explanation F2-Save F3-Load F5-Zoow F6-Nex F10-Continue

Рис. 6.1

predicates

member (element,list) go (list) clauses

member (Х,[Х£_]).

member (X, [_£ T] :- member (X, T).

go (X) :- member (Y,X),

write (Y,"\n"), fail. go(X) :- member (l,X), write ("True\n"),!;

write ("False\n"). goal

go ( [p,r,o,l,o,g]).

Редактор располагает курсор под словом goal и процесс ожидает вашей команды. Для продолжения трассировки нажмите клавишу F10. Это сообщит Турбо Прологу, что надо продвинутся на один шаг процесса.

Обратите внимание на текст в окне Trace. Ключевые слова CALL, RETURN, FAIL и REDO отражают состояние работы вашей программы, Несвязанные (неопределенные) переменные представляются символом подчеркивания (_). Связанные переменные представляются их текущими значениями.

Когда вы будете готовы перейти к следующему шагу программы, нажмите клавишу F10. Трассировка программы поможет вам понять как с помощью поиска с возвратом предикат member "разбирает" список по одному элементу.

После того, как вы пройдете по шагам всю программу, вернитесь в окно Edit (окно редактора) и сделайте директиву trace комментарием (или удалите ее), после чего снова нажмите Alt-R.

Трассировка представляет из себя не только средство отладки, но и очень важное обучающее средство. Если вам непонятно поведение определенного предиката, трассировка покажет подробную работу преди­ката.