オブジェクトの印刷表現とは、そのオブジェクトに対してLispプリンタ(関数 prin1)が生成する出力の形式のことです。すべてのデータ型には一意の印刷表現があります。オブジェクトの読み込み構文とは、そのオブジェクトに対してLispリーダ(関数 read)が受け付ける入力の形式のことです。これは必ずしも一意とは限らず、多くの種類のオブジェクトが複数の構文を持っています。Lispオブジェクトの読み込みと印刷を参照してください。
多くの場合、オブジェクトの出力形式は、そのオブジェクトの読み取り構文にもなります。しかし、Lispプログラムにおいてこれらの型のオブジェクトを定数として記述することは意味をなさないため、読み取り構文を持たない型もあります。こうしたオブジェクトはハッシュ表記で出力されます。これは、文字「#<」、説明的な文字列(通常は型名に続いてオブジェクト名)、および閉じ文字「>」で構成されます。(これが「ハッシュ表記」と呼ばれるのは、「ハッシュ」または「ナンバーサイン」として知られる文字「#」で始まるためです。)例えば:
(current-buffer)
⇒ #<buffer objects.texi>
ハッシュ記法は全く読み取れないため、Lispリーダーは‘#<’に遭遇するたびにエラーinvalid-read-syntaxを報告します。
本章の以降の節では、各Lispデータ型について、そのデータ型の説明とともに、読み取り構文と出力表現について記述します。例えば、文字列の読み取り構文と出力表現については文字列型およびそのサブセクションを、ベクトルに関する同様の情報についてはベクトル型などを参照してください。
他の言語では、式とはテキストであり、それ以外の形式は持ちません。Lispでは、式は主にLispオブジェクトであり、副次的にそのオブジェクトの読み取り構文となるテキストであるに過ぎません。多くの場合、この区別を強調する必要はありませんが、常に念頭に置いておかなければ、時折ひどく混乱することになります。
式を対話的に評価する場合、Lispインタプリタはまずそのテキスト表現を読み込み、Lispオブジェクトを生成した上で、そのオブジェクトを評価します(評価を参照)。ただし、評価と読み込みは別々の処理です。読み込みは、読み込まれたテキストが表すLispオブジェクトを返します。このオブジェクトは、後で評価される場合もあれば、されない場合もあります。オブジェクトを読み込むための基本関数であるreadの説明については、入力関数を参照してください。