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

Трассировка в режиме оптимизации: shorttrace

Турбо Пролог использует оптимизацию для увеличения скорости выполне-

ния. Одним важным приемом оптимизации является исключение очереди рекур-

сии (см. "Стили программирования" в главе "Элементы языка" в справочном

руководстве).

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

формацию обо всех операторах CALL и RETURN, которые являются логической

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

которые являются частью цикла хвостовой рекурсии, хотя Турбо Пролог обыч-

но оптимизирует эти вызовы. Вы можете запустить программу в режиме трас-

сировки, при котором используются преимущества такой внутренней оптимиза-

ции. В режиме оптимизированной трассировки показываются вызовы хвостовой

рекурсии в менее избыточном режиме, но информация по операторам RETURN в

этом случае выводится не всегда.

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

ву shorttrace вместо trace. (Вы можете также выбрать Shorttrace из меню

Option/Compiler Directives/Trace.)

Пример

Замените директиву trace в программе CH10EX02.PRO на директиву

shorttrace, после чего для запуска программы нажмите клавиши Alt-R.

Теперь, когда вы нажмете для выполнения программы по шагам клавишу

F10, обратите внимание, что Турбо Пролог выводит меньше информации.

Трассировка указанных предикатов

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

ляется трассировка только определенных предикатов. Для этого используются

директивы trace и shorttrace с указанием предикатов, например:

trace p1, p2, p3,... или shorttrace p1, p2, p3,...

Если вы напишете директивы таким способом, трассировка будет показы-

вать CALL и RETURN только для указанных предикатов (p1,p2,p3 и т.д.).

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

/* Программа CH10EX03.PRO */

shorttrace write_list, assert_fact

domains

list = symbol*

database

owns (symbol,symbol)

predicates

assert_facts

gather_goods (symbol)

write_list(list)

clauses

assert_facts:-

assert ( owns(micki,dog) ),

assert ( owns(micki,car) ),

assert ( owns(micki,dress) ),

assert ( owns(eloise,car) ),

assert ( owns(claudio,tennis_racket) ),

assert ( owns(claudio,sneakers) ),

assert ( owns(kenny,boots) ).

gather_goods (Who) :-

findall (Goods,owns (Who,Goods),Goods_list),

write (Who,"owns:\n"),

write_list (Goods_list).

write_list ([]) :- !.

write_list ([H|T]) :-

write (H,"\n"),write_list (T).

goal

assert_facts,

gather_goods (micki),

write ("That's all!\n").

Сохранение результатов трассировки

Нажатие клавиш Alt-P позволяет в любое время перейти в режим trace

save (сохранение трассировки). Для переназначения вывода результатов

трассировки на печать или в файл PROLOG.LOG нужно нажать клавиши Alt-R.

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