Чтение программ
Для передачи программ в систему Prolog могут использоваться встроенные предикаты, которые позволяют, как принято называть эту операцию, получить консультацию из файлов или откомпилировать файлы с программами. Подробные сведения о том, как реализованы операции получения консультации и компиляции файлов, зависят от реализации Prolog. Ниже рассматриваются некоторые основные средства, доступные во многих версиях Prolog.
Системе Prolog можно сообщить, что она должна прочитать и обработать программу из файла 1, с помощью цели в форме consult . - , например, следующим образом: ?- consult) ргодгатЗ)
В зависимости от реализации может потребоваться присвоить файлу с указанным именем, в данном случае ргодгатЗ, расширение, которое обозначает его как программный файл Prolog. Результатом достижения этой цели становится то, что все предложения в файле ргодгапз считываадтся и загружаются в память. Затем эти предложения используются системой Prolog при формировании ответов на последующие вопросы пользователя. В дальнейшем на протяжении того же сеанса для получения консультации может быть загружен другой файл. По сути, результат такой операции состоит в том, что предложения из этого нового файла загружаются в память. Но нюансы выполнения данной операции зависят от реализации Prolog и от других обстоятельств. Например, если новый файл содержит предложения, касающиеся процедуры, которая определена в файле, ранее использовавшемся для получения консультации, то в одном варианте новые предложения могут быть добавлены к концу текущего набора предложений, а другой вариант может предусматривать полную замену предыдущего определения этой процедуры новым определением.
Часть I. Язык Prolog
Для получения консультации с помощью одной и той же цели consult можно использовать несколько файлов, например, следующим образом: ?- consult ( [ programs, program-}, queens! >.
Подобный вопрос может быть также записан более просто: 1- [ programs, program4, queens].
Программы, использовавшиеся для получения консультации, служат в качестве дополнительной информации для интерпретатора Prolog (именно поэтому операция получения консультации имеет такое название). Если данная реализация Prolog предусматривает также использование компилятора, то программы могут быть загружены в откомпилированной форме. Это позволяет повысить быстродействие программы, причем обычно быстродействие откомпилированного кода по сравнению с интерпретируемым возрастает в 5-10 раз. Программы загружаются в память в откомпилированной форме с помощью встроенного предиката compile, например, следующим образом:
?- compile! programs). или ?- compile! [ program4, queens, programs]}.
Откомпилированные программы характеризуются более высоким быстродействием, а интерпретируемые программы проще для отладки, поскольку их можно проверять и проводить трассировку с помощью средств отладки Prolog. Поэтому интерпретатор обычно используется на этапе разработки программы, а компилятор — при создании окончательной версии программы.
Еще раз следует отметить, что подробные сведения о получении консультаций и компилировании файлов зависят от реализации Prolog. Обычно любая реализация Prolog позволяет также пользователю вводить и редактировать программу в интерактивном режиме.
Резюме
• Ввод и вывод (отличный от того, который связан с выполнением запросов к программе) осуществляются с использованием встроенных процедур. В этой главе представлен простой и практичный набор подобных процедур, которые предусмотрены во многих реализациях Prolog.
• Представленный здесь набор предназначен для работы с файлами, имеющими последовательную организацию, В программе имеются текущий входной поток и текущий выходной поток. Пользовательский терминал рассматривается как файл с именем user.
• Переключение между потоками осуществляется с помощью перечисленных ниже предикатов.
• see ( File). Файл File становится текущим входным потоком.
• tell ( File) . Файл File становится текущим выходным потоком.
• seen. Закрывает текущий входной поток,
• told. Закрывает текущий выходной поток.
• Файлы считываются и записываются следующими способами:
• как последовательности символов;
• как последовательности термов.
Ниже перечислены встроенные процедуры для чтения и записи символов и термов.
• read ( Term}. Вводит следующий терм.
Глава 6. ВВОДИ ВЫВОД
• write ( Term). Выводит терм Term.
• put ( CharCode). Выводит символ с указанным кодом ASCII,
• get0 ( CharCode) . Вводит следующий символ.
• get ( CharCode) . Вводит следующийлечшюшшыТ! символ.
• Для форматирования применяются две процедуры, перечисленные ниже.
• nl. Выводит символ с обозначением новой строки.
• tab< N). Выводит N пробелов.
• Процедура name ( Atom, CodeList) применяется для анализа и формирова
ния атомов. CodeList — это список кодов символов ASCII в имени атома
Atom.
• Во многих реализациях Prolog предусмотрены дополнительные средства для об
работки файлов, отличных от последовательных, для вывода на экран окон, под
держки графических примитивов, ввода информации с помощью мыши и т.д.