Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Conspekt.doc
Скачиваний:
11
Добавлен:
31.08.2019
Размер:
1.39 Mб
Скачать

5.13 Ввод-вывод в системе пролог

До сих пор рассматривался один вид связи пользователя с программой - пользователь задает вопросы, а программа ему отвечает, конкретизируя переменные. Это просто, однако часто требуется более гибкая организация ввода/вывода.

ПРОЛОГ может выполнять I/O, используя несколько входных и выходных потоков, т.е. в общем случае Пролог взаимодействует с несколькими файлами.

Файл 1 ---------¬ Файл 1

Входные ... ... Выходные

потоки потоки

Файл N Файл N

Дисплей Клавиатура

Терминал считается обычным файлом и имеет постоянное имя USER. В любой момент времени ПРОЛОГ-Система работает только с одним файлом и с одним файлом вывода. Такие файлы называются текущими входным и выходным потоками.

При входе в ПРОЛОГ текущими файлами вв-выв является USER. Чтобы выполнить вв/вывод из других файлов нужно переключить входные и выходные потоки. Для этого используются встроенные предикаты :

1.Предикаты для входного потока:

a).see(<имя файла>) - переключает вх. поток.

see(F),

processing(F),

see(user).

b).seen(<имя файла>) - закрытие входного потока.

с).seeing(X) - где X:= <значение текущего входного пото-

ка>, т.е. F унифицируется с именем файла,

который соответствует текущему входному

потоку.

2.Предикаты для выходного потока:

a).tell(<имя файла>).

b).told(<имя файла>).

c).telling(X).

Все файлы в ПРОЛОГ рассматриваются как текстовые и обрабатываются последовательно, что означает что из файла м. и считать, и записать символы EOLN и EOF. Если при чтении файла мы доходим до EOF, то в качестве результата возвращается константа end_of_file. Если при чтении файла мы доходим до EOLN, то в качестве результата возвращается константа end_of_line.

Считанную или записанную один раз информацию считать или перезаписать невозможно.

Кроме  стандартных входных потоков ПРОЛОГ-С позволяет работать с другими входными потоками.

open(<имя потока>,<имя файла>,<доступ>),

где

<доступ> ::= { r| w| r/w| a| r/a }

r - чтение

w - запись

a - конкатенация

?- open(S1,'r.data',r).

S1 связывается с файлом 'r.data'. Имя потока выступает

как логическое имя файла.

create(<имя потока>,<имя файла>)

close(<имя потока>)

5.13.1 Предикаты ввода-вывода символов

Существуют две основные возможности рассмотрения файлов в Прологе: либо последовательность символов, либо последовательность термов.

<Терм> - любой объект языка ПРОЛОГ

- const

- переменная

- составные термы

<атом> ::= { 'атом' | 'Атом' | константа }

Числа в ПРОЛОГе - числа.

Для чтения символов из входного потока используют предикаты get и get0.

 get0(C) - читает из входного потока, являющегося текущим, символ и сопоставляет с переменной С

ASCII-код считанного символа.

Читаем A ==> C=65.

get(C)- работает аналогично get0, но пропускает непечатные символы, т.е. позволит пропустить все пробелы и ввести 1-ый символ, отличный от пробела.

Запись в выходной поток :  put(C).

put(65) ==> в выходном потоке A

put(65+32) ==> -- // -- a

put('d') ==> -- // -- d

put([65]) ==> -- // -- A

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]