次: , 前: Lisp Data Types, 上: Lisp Data Types


2.1 表示表現と入力構文

オブジェクトの表示表現(printed representation)とは、 Lispプリンタ(関数prin1)がそのオブジェクトを出力表示するときの 書式です。 オブジェクトの入力構文(read syntax)とは、 Lispリーダ(関数read)がそのオブジェクトを入力として受理する書式です。 See Read and Print

ほとんどのオブジェクトには1つ以上の可能な入力構文があります。 ある種の型のオブジェクトには入力構文はありませんが、 そのような型のオブジェクトをLispプログラムに直接入力する意味がないからです。 このような場合を除くと、 オブジェクトの表示表現はそのオブジェクトの入力構文でもあります。

他の言語では、式はテキストであって、これ以外の形はありません。 Lispでは、式はとにかくLispオブジェクトであって、 オブジェクトの入力構文であるテキストは副次的なものです。 この違いを強調する必要はありませんが、 このことを心に留めておかないと混乱することがあります。

各型には表示表現があります。 入力構文のない型もあります。 たとえば、バッファ型には入力構文はありません。 このような型のオブジェクトはハッシュ記法(hash notation)で表示します。 つまり、文字列`#<'のあとに説明用の文字列 (典型的には型名にオブジェクトの名前を続けたもの)を続け、 対応する`>'で閉じます。 ハッシュ記法を読み取ることはできませんから、 Lispリーダが`#<'に出会うとエラーinvalid-read-syntaxを 通知します。

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

読者が対話的に式を評価するとき、 Lispインタープリタは、まず、 式のテキスト表現を読み取ってLispオブジェクトを生成し、 そのオブジェクトを評価します(see Evaluation)。 しかしながら、評価と読み取りは別々の動作です。 読み取りでは、読み取ったテキストが表すLispオブジェクトを返します。 このオブジェクトを、のちに評価する場合もありますが、 評価しない場合もあります。 オブジェクトを読み取る基本関数readについては、 See Input Functions