Глава 22
Input/Output

 22.1 Printed Representation of Lisp Objects
  22.1.1 What the Read Function Accepts
  22.1.2 Parsing of Numbers and Symbols
  22.1.3 Macro Characters
  22.1.4 Standard Dispatching Macro Character Syntax
  22.1.5 The Readtable
  22.1.6 What the Print Function Produces
 22.2 Input Functions
  22.2.1 Input from Character Streams
  22.2.2 Input from Binary Streams
 22.3 Output Functions
  22.3.1 Output to Character Streams
  22.3.2 Output to Binary Streams
  22.3.3 Formatted Output to Character Streams
 22.4 Querying the User

Common Lisp provides a rich set of facilities for performing input/output. All input/output operations are performed on streams of various kinds. This chapter is devoted to stream data transfer operations. Streams are discussed in chapter 21, and ways of manipulating files through streams are discussed in chapter 23.

While there is provision for reading and writing binary data, most of the I/O operations in Common Lisp read or write characters. There are simple primitives for reading and writing single characters or lines of data. The format function can perform complex formatting of output data, directed by a control string in manner similar to a Fortran FORMAT statement or a PL/I PUT EDIT statement. The most useful I/O operations, however, read and write printed representations of arbitrary Lisp objects.

Common Lisp содержит богатый функционал для выполнения операций ввода/вывода. Все эти операции производятся на различного вида потоках. Данная глава посвящена тому, как оперировать данными в потоках. Потоки обсуждаются в главе 21, а способы работы с файлами через потоки в главе 23.

Большинство операций ввода/вывода в Common Lisp’е читают и записывают буквы, но также есть функции и для бинарных данных. Есть простые примитивы для чтения и записи одного символа или строк данных. Функция format может выполнять сложное форматирование выходных данных, с помощью управляющей строки как в выражении FORMAT в Fortran’е или в PUT EDIT в PL/I. Однако, самые полезные операции ввода/вывода читают и записывает выводимые представления произвольных Lisp’овых объектов.