20.1 Введение в чтение и вывод

Чтение объекта Lisp означает разбор выражения Lisp в текстовой форме и получение соответствующего объекта Lisp. Именно так программы Lisp попадают в Lisp из файлов кода Lisp. Мы называем этот текст синтаксисом чтения объекта. Например, текст ‘(a . 5)’ является синтаксисом чтения ячейки cons, чей CAR — a, а CDR — число 5.

Вывод объекта Lisp означает получение текста, представляющего этот объект — преобразование объекта в его представление для вывода (см. Представление для вывода и синтаксис чтения). Вывод вышеописанной ячейки cons дает текст ‘(a . 5)’.

Чтение и вывод — это, по сути, обратные операции: вывод объекта, полученного чтением определенного фрагмента текста, часто дает тот же самый текст, а чтение текста, полученного выводом объекта, обычно дает объект, выглядящий похоже. Например, вывод символа foo дает текст ‘foo’, а чтение этого текста возвращает символ foo. Вывод списка, элементы которого — a и b, дает текст ‘(a b)’, а чтение этого текста дает список (но не тот же самый список) с элементами a и b.

Однако эти две операции не являются строго обратными друг другу. Существует три типа исключений: