Go to the first, previous, next, last section, table of contents.

タイプと Lisp オブジェクト

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 シンタックスについて述べます。


Go to the first, previous, next, last section, table of contents.