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, но в конце добавляет литеру конца строки.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
.