3.10. STDIO: СТАНДАРТНЫЙ ВВОД-ВЫВОД


$channel STDIN STDOUT STDERR;

STDIN, STDOUT и STDERR - стандартные каналы ввода-вывода. Они автоматически открываются перед началом работы программы и автоматически закрываются по окончании работы программы.


$func CHANNEL = s.Channel;

CHANNEL создает новый канал s.Channel.


$func? OPEN-FILE s.Channel e.FileName s.Mode = ;

$func CLOSE-CHANNEL s.Channel = ;

OPEN-FILE открывает канал s.Channel и связывает его с файлом с именем e.FileName. s.Mode - это литера, которая указывает режим, в котором будет происходить работа с файлом: "r" или "R" - чтение, "w" или "W" - запись, "a" или "A" - добавление в конец файла. Если файл открыть не удается, результатом работы OPEN-FILE является неуспех $fail(0).

CLOSE-CHANNEL закрывает канал s.Channel.


$func? EOF? s.Channel = ;

EOF? проверяет, что текущая позиция у файла, с которым связан канал s.Channel, находится в конце файла.


$func? READ = t.Term;

$func? READ-CHAR = s.Char;

$func? READ-LINE = e.Char;

$func WRITE e.Exp = ;

$func WRITELN e.Exp = ;

$func PRINT e.Exp = ;

$func PRINTLN e.Exp = ;

READ читает из канала &STDIN очередное изображение терма. Если не осталось ни одного терма - выдает $fail(0).

READ-CHAR читает из канала &STDIN очередную литеру. Если не осталось ни одной литеры - выдает $fail(0).

READ-LINE читает из канала &STDIN все литеры до ближайшего конца строки (включительно) и выдает их в качестве результата (не включая литеру конец строки). Если не осталось ни одной литеры - выдает $fail(0).

WRITE пишет в канал &STDOUT изображение выражения e.Exp (если e.Exp не содержит динамических символов, его можно ввести обратно, терм за термом, с помощью функции READ).

WRITELN делает то же, что и WRITE, но в конце добавляет литеру конца строки.

PRINT преобразует выражение e.Exp в цепочку литер так же, как это делает функция TO-CHARS, и выводит его в канал &STDOUT.

PRINTLN делает то же, что и PRINT, но в конце добавляет литеру конца строки.


$func? READ! s.Channel = t.Term;

$func? READ-CHAR! s.Channel = s.Char;

$func? READ-LINE! s.Channel = e.Char;

$func WRITE! s.Channel e.Exp = ;

$func WRITELN! s.Channel e.Exp = ;

$func PRINT! s.Channel e.Exp = ;

$func PRINTLN! s.Channel e.Exp = ;

Эти функции отличаются от соответствующих функций без восклицательного знака тем, что операции выполняются над каналом

s.Channel.