- •Язык программирования турбо пролог
- •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. Трассировка
Когда система поверит, что программа синтаксически правильна, она будет успешно откомпилирована. При этом Турбо Пролог поддерживает уникальные средства отладки и трассировки для эффективной разработки программы.
Когда ваша программа готова к выполнению, следующим шагом отладки является внимательный выбор целей, обеспечивающий проверку написанных вами предикатов. Для того чтобы проверить логику вашей программы, каждый предикат должен быть проверен со всем набором параметров, с которыми вы предполагаете его использовать.
Если в ответ на запрос будет получен неожиданный результат, то необходимо сделать третий шаг в цикле отладки - трассировку программы. При трассировке в окнах Trace (Трассировка), Edit (Редактор) и Dialog (Диалог) выводится пошаговая информация о том, как выполняется программа.
6.2.1. Директивы трассировки
Для трассировки программы в заголовке программы нужно поместить директиву компилятора trace (или выбрать trace из меню Option/ Compiler Directives/Trace).
Директива trace показывает каждый вызываемый предикат и текущие значения аргументов этого предиката Редактор располагает курсор на вызываемой подцели, причем точно показывает, где ваша программа выполняется и каковы при этом значения связанных переменных. По мере того, как Турбо Пролог пытается удовлетворить каждый вызов, курсор продвигается в ту точку в вашей программе, где система пытается реализовать текущий вызов.
Таблица 6.1
CALL |
Когда вызывается предикат, его имя и значения его параметров выводятся в окне Trace. |
RETURN |
Когда предикат (или правило) удовлетворяется, в окне Trace выводится RETURN и возвращаемый предикат. Если имеются другие предложения, соответствующие входным параметрам, то появляется изображение звездочки (*), показывающее, что имел место поиск с возвратом (недетерминированный). |
FAIL |
Когда предикат не удовлетворяется, перед именем неудачно Завершившегося предиката появляется слово FAIL. |
REDO |
REDO показывает, что произведен поиск с возвратом. Имя повторно выполняющегося предиката появляется в окне Trace наряду со значениями его параметров. |
Пример (Рис 6.1). Этот пример демонстрирует использование директивы компилятора trace. Загрузите программу, а затем для запуска программы нажмите клавиши Alt-R
trace
domains
list = element *
element = symbol
Files Edit Ru Cornpile Option Setup | |
Editor |
Dialog |
Error Correction Line18 Col33 C: EXAMPLES predicates make_list( integer, list, list) goal make_list( 1, [ 1,2], New_List). clauses make_list(Head. List, [Head,List]). 505 Type error: Illegal variable type For this position. |
|
Message |
Trace |
Load WORK. PRO Load С: ЕХАMPLES\CHOI.РRO Compiling C: EXAMLES\CHOI. F1: Error explanation F2-Save F3-Load F5-Zoow F6-Next F10-Continue |
|
F1: Error explanation F2-Save F3-Load F5-Zoow F6-Nex F10-Continue |
Рис. 6.1
predicates
member (element,list) go (list) clauses
member (Х,[Х£_]).
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. Это сообщит Турбо Прологу, что надо продвинутся на один шаг процесса.
Обратите внимание на текст в окне Trace. Ключевые слова CALL, RETURN, FAIL и REDO отражают состояние работы вашей программы, Несвязанные (неопределенные) переменные представляются символом подчеркивания (_). Связанные переменные представляются их текущими значениями.
Когда вы будете готовы перейти к следующему шагу программы, нажмите клавишу F10. Трассировка программы поможет вам понять как с помощью поиска с возвратом предикат member "разбирает" список по одному элементу.
После того, как вы пройдете по шагам всю программу, вернитесь в окно Edit (окно редактора) и сделайте директиву trace комментарием (или удалите ее), после чего снова нажмите Alt-R.
Трассировка представляет из себя не только средство отладки, но и очень важное обучающее средство. Если вам непонятно поведение определенного предиката, трассировка покажет подробную работу предиката.