- •Язык программирования турбо пролог
- •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. Трассировка и отладка пролог программ
В этой главе обсуждаются различные инструменты Турбо Пролога, предназначенные для отладки программ. Эти средства делятся на четыре основные категории: синтаксический контроль, средство трассировки, директивы компилятора и сообщения об ошибках во время исполнения.
Синтаксический контроль: синтаксический контроль Турбо Пролога
работает в совокупности со встроенным редактором. Когда вы пытаетесь компилировать программу, исходный код которой содержит синтаксическую ошибку, система выдаст сообщение об ошибке в окне редактора и расположит курсор на месте ошибки.
Трассировка: Турбо Пролог также поддерживает много различных средств трассировки, что позволяет:
выполнять вашу программу по шагам;
устанавливать точки трассировки для пошагового выполнения некоторых частей программы;
трассировать только те предикаты, которые вы указали;
выполнять трассировку в режиме оптимизации;
включать и выключать трассировку в диалоговом режиме;
направлять трассировку в диалоговом режиме для вывода на печать или в файл.
Директивы компилятора: третьей формой отладки в Турбо Прологе является группа директив компилятора, которые позволяют задавать тип и уровень обнаруженной ошибки, а также получить отчетную информацию, которую компилятор выдает во время трансляции программы, включая:
предупреждения, если ваша программа содержит неопределенные предложения;
список предикатов в вашей программе, а также их область действия, размер, типы аргументов и поток параметров, если они используются и являются определенными.
Ошибки времени выполнения: четвертым средством Турбо Пролога для нахождения ошибок в ваших кодах является сообщение об ошибках времени выполнения. После того как ваша программа успешно скомпилирована, ошибки могут возникнуть только при ее работе. Если это произойдет, то программа сообщит номер ошибки времени выполнения и место ее возникновения.
Как программист, вы должны знать, что ошибки времени выполнения очень трудно отслеживать. Так как логика программы не может быть полностью протестирована, пока нет фактической работы, в целях облегчения отладки вашей программы в Турбо Прологе имеются средства вывода информации об ошибках времени выполнения.
Для проверки и тонкой настройки вашей программы эти четыре средства отладки можно различным образом сочетать. В этой главе показано, как использовать средства отладки Турбо Пролога и даются примеры того, как эти средства могут помочь при разработке программы.
6.1. Синтаксическая проверка
Перед выполнением программы компилятор прежде всего проверяет код программы на соответствие синтаксису Турбо Пролога. При этом система всегда проверяет, чтобы значения различных типов доменов не перемешивались. При обнаружении системой ошибки, она передает управление редактору, и располагает курсор в том месте программы, где была найдена ошибка.
При выводе сообщения о синтаксической ошибке в коде вашей программы Турбо Прологом наряду с номером ошибки выдается сообщение об ошибке (если присутствует файл PROLOG.ERR ). Если сообщение об ошибке остается для вас неясным или хотите узнать больше о различных случаях, в которых возникает данная ошибка, нажмите клавишу F1. При этом вы получите дополнительную информацию по данной конкретной проблеме. Большинство сообщений об ошибках снабжены дополнительным справочным текстом, в котором объясняется, в каком случае может возникать подобная ошибка и каким образом можно ее устранить. Подробные описания сообщений об ошибках Турбо Пролога содержится в Приложении "Сообщения об ошибках" в "Справочном руководстве по Турбо Прологу"[ 4 ].
Когда вы отредактируете программу и захотите продолжить компиляцию, нажмите клавишу F10. При этом Турбо Пролог возобновит компиляцию программы. Если имеются другие ошибки, то он снова вернет управление редактору. В противном случае трансляция будет завершена и система спросит вас что делать дальше.
Пример. Загрузите следующую программу в редактор Турбо Пролога и откомпилируйте ее.
domains
list = integer*
predicates
make_list (integer, list, list) goal
make_list (1, [1,23, New_List). clauses
make_list (Head, List, [Head,List]).
Такие ошибки, как в этой программе, программистам очень трудно обнаружить. Их также трудно обнаружить при трассировке. Однако этот тип ошибок можно просто обнаружить с помощью средства проверки соот-ветствия типов.