4.1. 紹介
型type
はオブジェクトの(可能であれば無限の)集合です。 オブジェクトはひとつ以上の型に属することができます。 型は決してCommon Lispのオブジェクトとして明確に表現されません。 かわりに、これらは型指定子という型を示すオブジェクトを使うことで 間接的に参照されます。
新しい型は、deftype
, defstruct
, defclass
, define-condition
を使うことによって定義できます。
集合のメンバーをテストに使われるtypep
関数は、 オブジェクトがその型であるかどうかを決定するときに使用されます。 部分集合かテストするのに使われるsubtypep
関数は、 型が別の型のサブタイプかどうかを決定するときに使用されます。 type-of
関数はオブジェクトが属している特定の型を返却しますが、 そのオブジェクトがひとつか複数の型に属している場合でも同様に返却します (例えば全てのオブジェクトは型t
ですが、 しかしtype-of
は常にt
ではない 指定された型の型指定子を返却します)。
変数ではないオブジェクトは型を持っています。 通常、どんな変数でもその値としてどんな値も持つことができます。 明示的な型宣言を行うことで ある変数が指定した型の値のみを取るように宣言することが可能です。 型は、同値の存在を除いては非循環有向グラフとして直接表せます。
型についての宣言は、declare
, proclaim
, declare
, the
を使うことで行うことができます。 より詳しい宣言の情報については3.3. 宣言をご確認ください。
オブジェクトシステムの基本的なオブジェクトにクラスがあります。 クラスは、インスタンスと呼ばれる他のオブジェクトの集合の 構造と振る舞いを決定します。 全てのオブジェクトはクラスの直接的なインスタンスです。 オブジェクトのクラスは、そのオブジェクトが実行できる操作の集合を決定します。 より詳しい情報は4.3. クラスをご確認ください。
関数呼び出しのときに指定した引数のクラスによって 特定化された振る舞いを持つ関数を作成することができます。 より詳しい情報は7.6. ジェネリック関数とメソッドをご確認ください。
オブジェクトのクラスのクラスは、そのメタオブジェクトと呼ばれます。 メタクラスに関するより詳しい情報は7.4. メタオブジェクトをご確認ください。