Чтение программ

Для передачи программ в систему 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 предусмотрены дополнительные средства для об­
работки файлов, отличных от последовательных, для вывода на экран окон, под­
держки графических примитивов, ввода информации с помощью мыши и т.д.