% 4.2.3. 型指定子
4.2.3. 型指定子
型指定子はシンボル、クラス、リストになれます。
figure_4-2
は、標準の原始的な型指定子であるシンボルのリストです。
figure_4-3
は、標準の合成された型指定子の名前のリストです。
構文の情報は、対応する型指定子の辞書の説明をみて下さい。
これはdefclass
, define-condition
, defstruct
,
deftype
を使うことで新しい型指定子を定義することができます。
Figure 4-2. 標準の原始的な型指定子
もし型指定子がリストであり、そのリストのcar
がシンボルのとき、
リストのrest
部は型の補助的な情報です。
そのような型指定子は合成された型指定子と呼ばれます。
明示的に別段の定めがある場合を除き、
補助的な項目は不特定とすることができます。
不特定の補助的な項目は、*
と書くことで指定します。
例えばvector
の完全な指定は、
要素の型とvector
の長さが現れます。
(vector double-float 100)
下記に長さを不特定にしたものを示します。
(vector double-float *)
下記に要素の型を不特定にしたものを示します。
(vector * 100)
2つの型指定子が同じで、
最初の型指定子が*
を持つのに対して、
2番目の型指定子はより明示的な指定をしているとします。
このとき、2番目の型指定子は1番目の型指定子のサブタイプを表します。
もしリストがひとつか複数の不特定な項目で終わっていたとき、
それらの項目は省略できます。
もし補助的なリスト全てに*
が現れてそれらを省略したときは、
かっこもまた省略可能です(そのリストはシンボルのcar
部に置き換えられます)。
例えば、(vector double-float *)
は(vector double-float)
に省略できますし、
(vector * *)
は(vector)
に省略でき、さらにvector
に省略できます。
Figure 4-3. 標準の合成された型指定子の名前
次の表は原始的な型指定子としては使えない 合成された型指定子の名前として使われる 定義された名前を表します。
and |
mod |
satisfies |
eql |
not |
values |
member |
or |
Figure 4-4. 標準の合成のみの型指定子の名前
新しい型指定子は、次の2つの方法で定義できます。
defstruct
を使い:type
オプションを使用せずに
構造体を定義することか、
あるいはdefclass
かdefine-condition
を使い
クラスを定義することで、
自動的にクラスか構造体の名前が
新しい型指定子のシンボルになります。deftype
は、他の型指定子をの省略形として、
派生された型指定子を定義するときに使用できます。クラスオブジェクトは型指定子として使用できます。 この方法で使ったとき、それはクラスの全てのメンバーの集合を示します。
次の表は、型と宣言に関係する定義された名前を示します。
coerce |
defstruct |
subtypep |
declaim |
deftype |
the |
declare |
ftype |
type |
defclass |
locally |
type-of |
define-condition |
proclaim |
typep |
Figure 4-5. 型と宣言に関係する定義された名前
次の表は、原始的な型指定子と合成された型指定子の
両方の型指定子として使われる定義された名前を示します。
これは、figure_4-2
とfigure_4-3
を合わせたリストです。
Figure 4-6. 標準の型指定子の名前