На этом шаге мы рассмотрим функции вывода информации.
Функции вывода передают выходные данные в текущий выходной поток (COS).
Если текущий выходной поток (COS) является дисковым файлом, и на диске недостаточно места для размещения выходных данных, делается попытка установки метки "Disk Full" со значением NIL. Если эта попытка не будет воспринята прикладными программами, то возникает прерывание по ошибке "Disk Full". При прерывании управляющей переменной WRS присваивается значение NIL, консоль принимается за текущий выходной поток, но файл остается открытым.
Приведем перечень функций, которые рассматриваются на этом шаге:
Функция | Назначение |
---|---|
Переключает текущий выходной поток в файл FileName (если расширение не указано, то используется расширение по умолчанию .LSP) | |
Передает символьное представление OBJECT в текущий выходной поток и возвращает OBJECT. | |
Идентична функции PRIN1, кроме того, что Р-имена, содержащие специальные символы, не ограничены разграничительными символами, причем значение контрольной переменной *PRINT-ESCAPE* не играет роли. | |
Передает символьное представление OBJECT в текущий выходной поток (COS), используя функцию PRIN1, ограничивает строку, а затем возвращает OBJECT. | |
Передает N символов ASCII новой строки в текущий выходной поток и возвращает NIL, если N - нуль или положительное целое. | |
Возвращает NIL, если мы уже находимся в начале строки. | |
Передает N пустых ASCII-символов (пробелов) в текущий выходной поток (COS) и возвращает количество переданных символов после того, как будет передана последняя новая строка. | |
Записывают элементы Р-имени SYMBOL в текущий выходной поток и возвращают SYMBOL. | |
Записывает N байтов в текущий выходной поток (COS) и возвращает N. | |
Определяет длину строки для вывода ее системным принтером в файле, так что строки автоматически ограничиваются по длине N символами. |
Расскажем вам о функциях вывода в системе muLISP85.
1. Функция (WRS FileName) переключает текущий выходной поток в файл FileName (если расширение не указано, то используется расширение по умолчанию .LSP)
Функция (WRS) переключает текущий выходной поток на стандартное устройство (дисплей).
Примеры:
$ (WRS MY.lib) ; Переключает текущий выходной поток в файл "MY.LIB" $ (SETQ WRS) ; Временно переключает вывод в стандартный ; выходной поток (обычно - на экран) $ (SETQ T) ; Подключение вывода к текущему выходному файлу
2. Функция (PRIN1 OBJECT) передает символьное представление OBJECT в текущий выходной поток и возвращает OBJECT.
Функция PRIN1 печатает символы, используя их Р-имена. Переменная *PRINT-ESCAPE* контролирует использование разграничительных символов вокруг Р-имен, т.е. пробелов, макро или разграничительных символов. PRIN1 печатает числа согласно текущей системе счисления. Управляющая переменная *PRINT-POINT* контролирует максимальное число десятичных знаков для изображения на экране дисплея дробных чисел. Функция PRIN1 печатает точечные пары, используя их списковые изображения, где это возможно, и изображения точечными парами, где это необходимо.
3. Функция (PRINC OBJECT) идентична функции PRIN1, кроме того, что Р-имена, содержащие специальные символы, не ограничены разграничительными символами, причем значение контрольной переменной *PRINT-ESCAPE* не играет роли.
Код функции имеет вид:
(DEFUN PRINC (OBJ *PRINT-ESCAPE*) (SETQ *PRINT-ESCAPE* T) (PRIN1 OBJ) )
4. Функция (PRINT OBJECT) передает символьное представление OBJECT в текущий выходной поток (COS), используя функцию PRIN1, ограничивает строку, а затем возвращает OBJECT.
Код функции имеет вид:
(DEFUN PRINT (OBJ) (PRIN1 OBJ) (TERPRI) OBJ )
5. Если N - нуль или положительное целое, то (TERPRI N) передает N символов ASCII новой строки в текущий выходной поток и возвращает NIL. Если N отсутствует, то его значение принимается равным 1.
Код функции можно записать так:
(DEFUN TERPRI (N) ((AND (INTEGERP N) (>=N 0)) (LOOP ((ZEROP N) NIL) ((WRITE-BYTE 13) ((WRITE-BYTE 10) (DECQ N) ) ) (TERPRI 1) )
6. Если мы уже находимся в начале строки, то функция (FRESH-LINE) возвращает NIL, иначе функция передает новую строку в текущий выходной поток (COS) и возвращает Т.
7. Если N - нуль или положительное целое число, то функция (SPACES N) передает N пустых ASCII-символов (пробелов) в текущий выходной поток (COS) и возвращает количество переданных символов после того, как будет передана последняя новая строка. Отсутствующее N заменяется на 1. Например:
$ (SPACES 10)
10 ; Курсор переместился вправо по строке на 10 позиций
8. Если SYMBOL - символ, то функции (WRITE-STRING SYMBOL) и (WRITE-LINE SYMBOL) записывают элементы Р-имени SYMBOL в текущий выходной поток и возвращают SYMBOL.
Функция WRITE-LINE записывает элемент новой строки после пересылки Р-имени. Если SYMBOL - не символ, то обе функции возвращают NIL.
9. Если N - целое число в пределах от 0 до 255 включительно, то функция (WRITE-BYTE N) записывает N байтов в текущий выходной поток (COS) и возвращает N. Например:
$ (WRITE-BYTE 65) 65
10. Если N - положительное целое, то функция (LINELENGTH N) определяет длину строки для вывода ее системным принтером в файле, так что строки автоматически ограничиваются по длине N символами. Функция LINELENGTH возвращает предыдущую длину строки. Если N - неположительное целое число или не задано, то функция возвращает текущую длину строки. Длина строки по умолчанию - 79.
На следующем шаге мы рассмотрим переменные, управляющие выводом информации.