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

6.2.4. Предикат trace

Кроме оптимизации скорости процесса трассировки Директива shorttrace приводит также к меньшему объему выводимой в окне Trace(Трассировка) информации. Когда вы трассируете достаточно большую программную секцию, это может быть существенным преимуществом, Однако и trace, и shorttrace могут генерировать тем не менее очень много информации. В этом случае для существенного уменьшения объема вывода вы можете использовать предикат trace.

Предикат trace всегда успешно завершается и работает только когда включен режим трассировки. Вы можете включить его, расположив в заголовке программы одну из соответствующих директив компилятора (trace или shorttrace) или выбрав их в меню O/С/Тrаcе. В последст­вии, если ваша программа встретит команду:

trace(off),

система выключит трассировку до тех пор пока не встретится команда: trace(on),

которая снова включит трассировку.

Пример использования предиката trace. Предположим вы уже знаете, что правило для предиката workslready работает как положено, и вы имеете правило для предиката test, определенное так:

test(X): - workslready( X, Z), other11redicate(В, А),...

Вы можете более эффективно проверить test, временно переписав его следующим образом:

test(X):- '

trace (off),

works_already(X, Z), trace(on),

other_predicate(B, A),

Предикат trace имеет вариант с выводом текущего состояния трассировки. Вы можете использовать эту версию trace внутри предикатов, для которых уже известно, что они работают. При этом доста­точно установить состояние трассировки обратно в первоначальное зна­чение. В сложных ситуациях это может оказаться очень ценным.

works_already (...):-trace(OLD),

/* ...*/

trace (off),

/* */

trace (OLD).

6.2.5. Диалоговое управление трассировкой

Когда программа работает в режиме трассировки, для изменения режима вы можете нажать Alt-T. При этом появится дополнительное меню с тремя возможностями (опциями): Status (Состояние), Trace Window (Окно Трассировки) и Edit Window (Окно Редактора). Для выбора нужной возможности можно использовать клавиши "Вверх", "Вниз", а клавишу и "Enter" ("Ввод") - для включения ("On") или выключения ("Off") выбранной возможности. Для продолжения работы вашей прог­раммы в выбранном режиме трассировки нажмите клавишу F10. Прочти­те описание возможностей меню Trace.

Состояние ( Status ). Опция Status определяет режим директивы trace. Для изменения состояния trace нажмите "S" или "Enter" ("Ввод"). Эта опция имеет тот же эффект, как и использование предикатов trace(on) и trace(off) внутри программы.

Окно Трассировки ( Trace Window ). Опция Trace Window опреде­ляет, будет ли обычный вывод трассировки посылаться в окно Trace (Трассировка). Если Trace Window выключено (установлено Off) и опция Edit Window включена (On), Турбо Пролог будет проходить программу от вызова к вызову без вывода сообщений в окно Trace. Для продолже­ния работы программы от вызова до вызова нужно нажимать клавишу F10.

Окно Редактора ( Edit Window ). Опция Edit Window определяет, будет ли Турбо Пролог показывать каждый шаг выполнения в окне Edit (Редактор). Если опция Edit Window установлена в Off (а опция Trace Window в On), вывод трассировки будет направляться в окно Trace и программа будет работать быстрее. При этом нет необходимости нажимать клавишу F10.

Примечание: 1. Одновременная установка Trace Window и Edit Window в Off аналогична установке в Off опции Status.

2. Вы можете заметить, что предикат write трассируется не так как другие предикаты. Сообщения о выполнении CALL и RETURN не по­являются. Это происходит потому, что оператор write обрабатывается компилятором особым образом. По этой же причине особым образом в режиме трассировки обрабатываются некоторые другие предикаты. Это следующие предикаты:

все операции сравнения (=, -, и т. д.);

все предикаты, транслируемые особым образом (см. Справочное руководство).