Директивы компилятора
В самом начале программы можно расположить одну или несколько директив компилятора, которые дают компилятору дополнительные инструкции по обработке программы.
Давайте для примера рассмотрим несколько наиболее широко используемых директив компилятора.
Директива trace применяется при отладке программы для трассирования. Этот процесс немного похож на пошаговое выполнение императивной программы с отслеживанием значений переменных. Трассировка позволяет пользователю наблюдать за ходом
выполнения программы. Если после ключевого слова trace указаны имена предикатов через запятую, то трассировка идет только по этим предикатам. В противном случае - по всем предикатам программы. После завершения отладки трассировку нужно выключить, чтобы компилятор мог осуществить оптимизацию хвостовой рекурсии.
Во время исполнения программы при включенной трассировке в специальном окне трассировки будет отображаться следующая информация:
- после слова "CALL" будет указано имя выполняемого предиката (текущая подцель) и его параметры; *
- после слова "FAIL" будет выводиться имя текущей подцели, которая не была достигнута;
- после слова "RETURN" будет выводиться результат вычисления текущей подцели, в случае успеха. При этом если у подцели есть еще альтернативы, к которым возможен возврат, то перед именем предиката высвечивается звездочка ("*");
- слово "REDO" перед именем предиката указывает на то, что произошел возврат и происходит вычисление альтернативного решения.
Переход от подцели к подцели вызывается нажатием функциональной клавиши F10. При этом в окне редактирования выполняющуюся подцель указывает курсор, она также отображается в окне трассировки с параметрами и дополнительной информацией.
Директива nowarnings используется для подавления предупреждения системы о том, что какая-то переменная встречается в предложении только один раз. Эту директиву стоит использовать только в хорошо отлаженных программах. Как правило, для подавления такого предупреждения ("WARNING: The variable is only used once") достаточно заменить переменную, которая встретилась только один раз, на анонимную переменную.
С помощью директивы include при компиляции в исходный текст можно вставить содержимое некоторого файла.
Заметим, что многие директивы компилятора могут быть не только расположены в тексте программы, но и установлены в меню среды разработки Турбо Пролога (Options Compiler Directives). Значение директивы компилятора, указанное в тексте программы, имеет более высокий приоритет, чем значение, установленное в меню.
Раздел описания констант
Раздел, озаглавленный зарезервированным словом CONSTANTS, предназначен для описания констант. Объявление константы имеет вид:
<имя константы>=<значение>
Имя константы должно быть идентификатором, то есть оно может состоять из английских букв, цифр и знака подчеркивания, причем не может начинаться с цифры.
Каждое определение константы должно размещаться в отдельной строке.
Например:
CONSTANTS
pi=3.14
bgi_path="c:\\prolog\\bgi"
В разделе описания констант можно использовать в качестве первого символа имени константы прописные символы, потому что в этом разделе прописные и строчные символы не различаются. Однако при использовании констант в разделе описания предложений нужно задействовать в качестве первого символа имени константы только строчные символы, чтобы Пролог-система не восприняла константу как переменную.
Разделов описания констант может быть несколько, но каждая константа должна быть определена до ее первого использования.