型指定子(type specifier)とは型を記述するための式のことです。型、つまりタイプは可能な値のセットを表します。型指定子はプリミティブ型と複合型に分類することができます。
型指定子は宣言を通じた関数インターフェイスの文書化(declare
フォームを参照)、構造体のスロット値の指定(Structures in Common Lisp Extensions for GNU
Emacs Lispを参照)、cl-the
による型チェック(Declarations in Common Lisp
Extensions for GNU Emacs Lispを参照)など、いくつかの目的のために使用されます。
プリミティブ型指定子は基本的な型指定子用(他の型指定子と複合されていない型)。
ビルトインのプリミティブタイプ(integer
、float
、string
など)はEmacs Lispオブジェクトの型階層にリストされている。
複合型はよりシンプルな型を組み合わせたり変更することによって、より複雑な型を定義したり的確な型仕様を定義する目的のために用いられる。
以下は複合型指定子のリスト:
(or type-1 … type-n)
型指定子or
は与えられたタイプのうち少なくとも1つを満たすような型の記述に用いられる。
(and type-1 … type-n)
型指定子and
は与えられたタイプすべてを満たすような型を記述する。
(not type)
型指定子not
は指定されたタイプ以外の任意のタイプを定義する。
(member value-1 … value-n)
型指定子member
は明示的にリストされた値だけを含んだ型の指定ができる。
(function (arg-1-type … arg-n-type) return-type)
型指定子function
は関数の引数とリターン値の型の記述に用いられる。引数タイプには関数の引数に合わせるために、シンボル&optional
や&rest
を織り交ぜることもできる(引数リストの機能を参照)。
以下の型指定子は1つ目のタイプがsymbol
、2つ目のオプションのパラメーターのタイプがfloat
であり、integer
をリターンするような関数を表している。
(function (symbol &optional float) integer)
(integer lower-bound upper-bound)
型指定子integer
は、範囲を指定することで整数のサブセットを定義する複合型として用いることもできる。この複合型を使えば、与えられた型にたいしてどんな整数が有効かを精密に制御できるだろう。
ここでlower-boundは範囲で最小の整数、upper-boundは最大の整数の値である。下限や上限に制限がないことを示すために、*
を使うことができる。
以下は-10から10までの整数を表している:
(integer -10 10)
以下は単一の10という値を表す:
(integer 10 10)
以下は負の無限大から10までのすべての整数:
(integer * 10)