Введение в чтение и печать
Чтение объекта Lisp означает разбор выражения Lisp в текстовой форме и создание соответствующего объекта Lisp. Именно так программы Lisp попадают в Lisp из файлов кода Lisp. Мы называем текст синтаксисом чтения объекта. Например, текст ‘(a . 5)’ является синтаксисом чтения ячейки конс, чья CAR является a, а чья CDR — число 5.
Печать объекта Lisp означает создание текста, представляющего этот объект — преобразование объекта в его печатное представление (см. Печатное представление). Печать ячейки конс, описанной выше, создаёт текст ‘(a . 5)’.
Чтение и печать — это в большей или меньшей степени обратные операции: печать объекта, полученного в результате чтения заданного текста, часто даёт тот же текст, а чтение текста, полученного в результате печати объекта, обычно приводит к объекту с похожим видом. Например, печать символа foo создаёт текст ‘foo’, а чтение этого текста возвращает символ foo. Печать списка, элементы которого a и b, создаёт текст ‘(a b)’, а чтение этого текста создаёт список (но не тот же самый список) с элементами a и b.
Однако, эти две операции не являются точно обратными друг другу. Есть три вида исключений:
- Печать может генерировать текст, который нельзя прочитать. Например, буферы, окна, фреймы, дочерние процессы и метки печатаются как текст, начинающийся с ‘#’; если вы попытаетесь прочитать этот текст, вы получите ошибку. Нет способа прочитать эти типы данных.
- Один объект может иметь несколько текстовых представлений. Например, ‘1’ и ‘01’ представляют то же целое число, а ‘(a b)’ и ‘(a . (b))’ представляют тот же список. Чтение примет любой из вариантов, но печать должна выбрать один из них.
- Комментарии могут появляться в определённых точках посреди последовательности чтения объекта без влияния на результат его чтения.
Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Streams-Intro.html