Скачиваний:
201
Добавлен:
17.06.2016
Размер:
2.69 Mб
Скачать

Трассировка

Когда система поверит, что программа синтаксически правильна, она

будет успешно оттранслирована. При этом Турбо Пролог поддерживает уни-

кальные средства отладки и трассировки для эффективной разработки прог-

раммы.

Когда ваша программа готова к выполнению, следующим шагом отладки

является внимательный выбор целей, обеспечивающий проверку написанных ва-

ми предикатов. Для того, чтобы проверить логику вашей программы, каждый

предикат должен быть проверен со всем потоком параметров, с которыми вы

предполагаете его использовать.

Если в ответ на запрос вы получите неожиданный результат, то вам не-

обходимо сделать третий шаг в цикле отладки - трассировку программы. При

трассировке в окнах Trace (Трасировка), Edit (Редактор) и Dialog (Диалог)

выводится пошаговая информация о том, как выполняется программа.

Директива трассировки

Для трассировки программы в заголовке вашей программы нужно помес-

тить директиву компилятора trace (или выбрать Trace из меню

Option/Compiler Directives/Trace).

Директива trace вместе с соединенными с ней функциями позволяет вы-

полнять вашу программу в пошаговом режиме. Когда вы запустите программу в

режиме трассировки, в окне Trace показывается каждый предикат, который

вызывается, и текущие значения аргументов этого предиката. Редактор рас-

полагает курсор на вызываемой подцели, причем точно показывает, где ваша

программа выполняется и каковы значения любых связанных переменных. По

мере того, как Турбо Пролог пытается удовлетворить каждый вызов, курсор

продвигается в ту точку в вашей программе, где система пытается реализо-

вать текущий вызов.

Таблица 10.1 Сообщения окна Trace

-----------------------------------------------------------------

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

параметров выводятся в окне Trace.

RETURN Когда предикат (или правило) удовлетворяется, в окне

Trace выводится RETURN и возвращаемый предикат. Если

имеются другие предложения, соответствующие входным

параметрам, то появляется изображение звездочки (*),

показывающее, что имел место поиск с возвратом

(недетерминированный).

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

завершившегося предиката появляется слово FAIL.

REDO REDO показывает, что произведен поиск с возвратом. Имя

повторно выполняющегося предиката появляется в окне Trace

наряду со значениями его параметров.

-----------------------------------------------------------------

Пример использования директивы trace

Этот пример демонстрирует использование директивы компилятора trace.

Загрузите программу CH10EX02.PRO, а затем для запуска программы нажмитх

клавиши Alt-R.

/* Программа CH10EX02.PRO -

Использование директивы trace */

trace

domains

list = element *

element = symbol

predicates

member (element,list)

go (list)

clauses

member (X,[X|_]).

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. Это сообщит

Турбо Прологу, что надо продвинутся на один шаг процесса.

────────────────────────────────────────────────────────────────

Files Edit Run Compile Option Setup

╔══════════════════ Editor ══════════════╗╔══════ Dialog ══════╗

║Trace Line 19 Col 24 C:EXAMPLES\CH10EX02║║p ║

║ ║║r ║

║predicates ║║ ║

║ member(elment, list) ║║ ║

║ go ║║ ║

║clauses ║║ ║

║ member(X, [X|_]). ║║ ║

║ 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"). ║║ ║

╚════════════════════════════════════════╝╚════════════════════╝

┌─────────── Massage ──────────┐┌──────────── Trace ───────────┐

│ ││ │

│Compiling C:EXAMPLES\CH10EX02.││REDO: member(_,["r","o","l","o│

│member ││","g"]) │

│go ││CALL: member(_,["o","l","o","g│

│member ││"]) │

└──────────────────────────────┘└──────────────────────────────┘

F1-Help F2-Save F10-Stap Shift-F10-Resize Alt-T-Trace on/off

Esc-End

────────────────────────────────────────────────────────────────

Рисунок 10.2 Синтаксическая проверка

Обратите внимание на текст в окне Trace. Ключевые слова CALL,

RETURN, FAIL и REDO отражают состояние работы вашей программы. Несвязан-

ные (неопределенные) переменные представляются символом подчеркивания

(_). Связанные переменные предствляются их текущими значениями.

Когда вы будете готовы перейти к следующему шагу программы, нажмите

клавишу F10. Трассировка программы поможет вам понять как с помощью поис-

ка с возвратом предикат member "разбирает" список по одному элементу.

После того, как вы пройдете по шагам всю программу, вернитесь в окно

Edit (окно редактора) и сделайте директиву trace комментарием ( или уда-

лите ее), после чего, чтобы увидеть, как программа работает без трасси-

ровки, снова выберите Alt-R. (Другой способ выключения трассировки мы по-

кажем в разделе "Диалоговая трассировка" далее в этой главе.)

Трассировка представляет из себя не только средство отладки, но и

очень важное обучающее средство. Если вам непонятно поведение определен-

ного предиката, трассировка прольет некоторый свет наподробную работу

предиката.

Соседние файлы в папке Документация