Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Обмен данными с файлами




Метод взаимодействия пользователя и программы, который применялся до сих пор, предусматривал ввод пользователем вопросов к программе и получение ответов программы в виде результатов конкретизации переменных. Такой метод обмена дан­ными является простым и достаточным для обеспечения ввода и вывода информа­ции. Тем не менее он часто является не совсем приемлемым, поскольку не обладает достаточной гибкостью. Поэтому этот основной метод обмена данными необходимо дополнить в следующих областях:

• ввод данных в форматах, отличных от вопросов, например в форме английских предложений;

• вывод информации в любом требуемом формате;

• ввод и вывод в любой компьютерный файл или на любое устройство, а не только на пользовательский терминал.

Состав встроенных предикатов, предназначенных для использования в качестве подобных расширений, зависит от реализации Prolog. В данной главе рассматривает­ся простой и удобный набор соответствующих предикатов, который входит в состав многих реализаций Prolog. Тем не менее необходимо всегда обращаться к руково­дству по соответствующей реализации Prolog для ознакомления с подробными сведе­ниями и характерными особенностями тех или иных средств. Во многих реализаци­ях Prolog предусмотрены различные дополнительные средства, не описанные в дан­ной главе. К ним относятся, в частности, средства работы с окнами, графические примитивы для рисования на экране, средства ввода информации с помощью мыши и т.д.


Вначале рассматривается тема, связанная с перенаправлением ввода и вывода информации в файлы, а затем показано, как можно обеспечить ввод и вывод данных в различных формах.

На рис, 6.1 показана общая ситуация, в которой программа Prolog осуществляет обмен данными с несколькими файлами. В принципе, программа может считывать данные из нескольких входных файлов, называемых также входными потоками, и выводить данные в несколько выходных файлов, которые называются выходными потоками. Данные, поступающие с пользовательского терминала, рассматриваются как еще один входной поток. Аналогичным образом, данные, выводимые на терми­нал, представляют собой один из выходных потоков. Эти потоки не фиксируются на жестком диске, но связаны с информационными структурами, аналогичными фай­лам (которые принято называть пстдофаилами) и известными под именем user. Имена других файлов могут быть выбраны программистом с учетом правил именова­ния файлов в используемой компьютерной системе.

Пользова­тельский терминал

Пользователь! 1 Пользователь


Входные, потоки i Фаил 1

файл 2 ■


»ап i \ Выходные -файл 4


Рис, 6,1. Взаимодействие программы Prolog и не­скольких файлов

В любой момент времени в ходе выполнения программы Prolog "активны" только два файла: один для ввода, а другой для вывода. Эти два файла, соответственно, на­зываются текущим входным потоком и текущим выходным потоком. В начале вы­полнения программы эти два потока соответствуют пользовательскому терминалу. Текущий входной поток можно перевести в другой файл, Filename, с помощью сле­дующей цели: see! Filename)

Эта цель достигается (если только не обнаружится какая-либо ошибка, связанная с переменой Filename) и вызывает в качестве побочного эффекта то, что ввод пере­ключается с предыдущего входного потока на файл Filename. Поэтому типичным примером использования предиката see является приведенная ниже последователь­ность целей, которая обеспечивает чтение определенных данных из файла file!, a затем повторное переключение на терминал,

see(filel),

read from file) Information), see fuser),

Текущий выходной поток можно изменить с помощью цели, заданной в следую­щей форме:

tell! Filename)

Ниже приведена последовательность целей для вывода некоторой информации в файл f ile3, а затем перенаправления последующего вывода снова на терминал.


Глава 6. Вводи вывод



tell(file3),

write_on_file£ Information),

tell { -user),

Цель

seen

закрывает текущий входной файл, а цель

told

закрывает текущий выходной файл.

В данной главе предполагается, что файлы могут обрабатываться только последо­вательно, хотя во многих реализациях Prolog предусмотрена также обработка файлов с произвольным доступом. Последовательные файлы обрабатываются таким же обра­зом, как и потоки на терминале. Каждый запрос на чтение определенной информа­ции из входного файла вызывает чтение данных с текущей позиции в текущем вход-пом потоке. После чтения текущая позиция, безусловно, перемещается на следую­щий непрочитанный элемент. Поэтому выполнение следующего запроса на чтение начинается с чтения данных в этой новой текущей позиции. Если запрос на чтение выполняется в конце файла, то информация, возвращаемая таким запросом, пред­ставляет собой атом end_of_file.

Операции записи выполняются таким же образом; каждый запрос на вывод инфор­мации приводит к добавлению этой информации к концу текущего выходного потока. Возможность возвращаться назад и перезаписывать часть файла не предусмотрена.

В этой главе рассматриваются только тая называемые текстовые файлы, т.е. файлы, состоящие из символов. Символы представляют собой буквы, цифры и специальные символы. Некоторые из специальных символов называются непечатае­мыми, поскольку после вывода их на терминал они не появляются на экране. Но эти символы могут оказывать иной эффект, например изменять интервалы между столб­цами и строками на экране.

Файлы могут обрабатываться в языке Prolog двумя основными способами, в зави­симости от формы представления в них информации. Один из способов состоит в том, что основным элементом файла является символ. В соответствии с этим один запрос на ввод или вывод вызывает чтение или запись единственного символа. В этой главе предполагается, что для этого служат встроенные предикаты get, getO и put.

Еще один способ обработки файлов состоит в том, что в качестве основных струк­турных блоков файла рассматриваются более крупные информационные единицы. Вполне естественно, что в качестве такой более крупной единицы принят терм Prolog. Поэтому при каждом запросе ввода-вывода такого типа из текущего входного потока или в текущий выходной поток передается, соответственно, целый терм. Пре­дикатами для передачи термов являются read и write. Разумеется, в этом случае ин­формация в файле должна находиться в форме, совместимой с синтаксисом термов.

Безусловно, выбор той или иной организации файла зависит от рассматриваемой задачи. Если спецификация задачи позволяет представить информацию естествен­ным образом в синтаксической структуре термов, то следует использовать файл, со­стоящий из термов. В таком случае появляется возможность передавать целый ос­мысленный фрагмент информации с помощью одного запроса. С другой стороны, есть такие задачи, характер которых определяет необходимость использования неко­торой другой организации файлов. В качестве примера можно назвать обработку предложений на естественном языке, например, для организации диалога на англий­ском языке между системой и пользователем. В подобных случаях файлы должны рассматриваться как последовательности символов, которые нельзя непосредственно интерпретировать как термы.



Часть I. Язык Prolog






Поделиться с друзьями:


Дата добавления: 2015-10-01; Мы поможем в написании ваших работ!; просмотров: 1059 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Стремитесь не к успеху, а к ценностям, которые он дает © Альберт Эйнштейн
==> читать все изречения...

2153 - | 2108 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.