Lisp オブジェクトとは、Lisp プログラムで用いられ操作されるデータのことです。数 字 `1' やリスト `(this is a list)' といったデータオブジェクトは "タイプを持っ ている" と言われます。
タイプを定義する 1つの方法は、それを Lisp オブジェクトの集合として定義すること です。同じタイプのオブジェクトは同じ構造を持ち、しばしば同じ文脈で用いられま す。あるオブジェクトは(同時に)複数のタイプに属すことができるため、 "あるオブ ジェクトのタイプが何であるか" を尋ねることは (あまり)意味がありません。そうで はなく、 "あるオブジェクトが(ある)タイプに属すか否か" を尋ねるべきです。
GNU Emacs Lisp にはタイプが複数存在しており、(それらの) タイプ自身をカテゴリ分 けすることができます。 primitive タイプ(数字、リスト、文字列といったようなも の) は Emacs により特別なものとして認識され、それを (さらに細かく)タイプ分けす ることはできません(もっと良い定義が必要!!)。
オブジェクトは 2種類以上のタイプのメンバーでありえますが、各々のオブジェクトは 唯 1つの primitive タイプに属します。オブジェクトの primitive タイプはそのオブ ジェクトのデータとともにストアされます。また、"あるオブジェクトが (ある) primitive タイプに属すか否か" をチェックする Lisp 関数が存在します。
スーパータイプは、同じ特性(訳注:property)を持つサブタイプを集めたものです。例 へば、ベクトルとストリングは、配列スーパータイプのサブタイプです。
derived (訳注:導出)(compound?? special-case??) タイプは、(別の)タイプを用いる 場合の特別な場合にあたります。例へば、Lisp 関数タイプは、その最初の要素が lambda であるリストのことです。
Emacs が認識する標準のタイプに加え、既存のタイプから(自分自身で) 自分用のタイ プを作ることができます。そのためには、 (そのタイプの)オブジェクトを作る関数 や、あるオブジェクトがそのタイプのメンバーか否かをチェックする関数が必要になり ます。
本チャプターでは、 GNU Emacs Lisp の標準タイプについて、その各々の目的ととも に、その print 表現と read シンタックスについて述べます。