- •Язык программирования турбо пролог
- •4.4. Переопределение стандартного ввода-вывода
- •4.5. Работа с файлами
- •5. Внутренняя база данных турбо пролога
- •5.1. Объявление внутренней базы данных
- •5.2. Обновление внутренней базы данных
- •5.3. Занесение фактов во время исполнения.
- •5.4. Удаление фактов во время выполнения программы
- •506 Type Error: The functor does not belong to the domain (функтор не относится к данному домену)
- •5.5. Чтение новых фактов иэ файла во время выполнения программы
- •5.6. Сохранение базы данных во время работы программы
- •6. Трассировка и отладка пролог программ
- •6.1. Синтаксическая проверка
- •6.2. Трассировка
- •6.2.1. Директивы трассировки
- •6.2.2. Трассировка в режиме оптимизации: shorttrace
- •6. 2. 3. Трассировка предикатов
- •6.2.4. Предикат trace
- •6.2.5. Диалоговое управление трассировкой
- •6.3. Директивы компилятора и отладка
- •6.4. Сообщения об ошибках во время выполнения программы
- •6.5. Опции компилятора из меню
- •7.Заключение
- •8. Литература:
- •Содержание:
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 обрабатывается компилятором особым образом. По этой же причине особым образом в режиме трассировки обрабатываются некоторые другие предикаты. Это следующие предикаты:
все операции сравнения (=, -, и т. д.);
все предикаты, транслируемые особым образом (см. Справочное руководство).