2.1 Представление для вывода и синтаксис чтения

Представление для вывода (printed representation) объекта — это формат вывода, генерируемый принтером Lisp (функцией prin1) для этого объекта. Каждый тип данных имеет уникальное представление для вывода. Синтаксис чтения (read syntax) объекта — это формат ввода, принимаемый парсером Lisp (функцией read) для этого объекта. Он не обязательно уникален; многие типы объектов имеют более одного синтаксиса. См. Чтение и вывод объектов Lisp.

В большинстве случаев представление для вывода объекта также является синтаксисом чтения для этого объекта. Однако некоторые типы не имеют синтаксиса чтения, поскольку не имеет смысла вводить объекты этих типов как константы в программе Lisp. Эти объекты выводятся в нотации хеша (hash notation), которая состоит из символов «#<<», описательной строки (обычно имя типа, за которым следует имя объекта) и закрывающей «>». (Это называется «нотацией хеша», потому что начинается с символа «#», известного как «хеш» или «знак номера»). Например:

(current-buffer)
     ⇒ #<buffer objects.texi>

Нотация хеша вообще не может быть прочитана, поэтому парсер Lisp выдает ошибку invalid-read-syntax всякий раз, когда он встречает «#<».

Мы описываем синтаксис чтения и представление для вывода каждого типа данных Lisp в том месте, где мы описываем этот тип данных, в следующих разделах этой главы. Например, см. Тип строки и его подразделы для синтаксиса чтения и представления для вывода строк; см. Тип вектора для той же информации о векторах; и т. д.

В других языках выражение — это текст; оно не имеет другой формы. В Lisp выражение в первую очередь является объектом Lisp, а вторично — текстом, который является синтаксисом чтения этого объекта. Часто нет необходимости подчеркивать это различие, но вы должны держать это в уме, иначе вы иногда будете очень сбиты с толку.

Когда вы вычисляете выражение интерактивно, интерпретатор Lisp сначала считывает его текстовое представление, создавая объект Lisp, а затем вычисляет этот объект (см. Вычисление). Однако вычисление и чтение — это отдельные действия. Чтение возвращает объект Lisp, представленный считанным текстом; объект может быть или не быть вычислен позже. См. Функции ввода для описания read, основной функции для чтения объектов.