logo
TurboProlog / Документация / TOM_1

Пример использования директивы 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. (Другой способ выключения трассировки мы по-

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

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

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

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

предиката.