型指定子とは、型を表す式のことである。型は、取り得る値の集合を表す。型指定子は、プリミティブ型と複合型に分類できる。
型指定子は、宣言による関数インターフェースの文書化(declare 形式を参照)、構造体スロット型の指定(Common
Lisp Extensions for GNU Emacs LispのStructuresを参照)、cl-the による型チェック(Common Lisp
Extensions for GNU Emacs LispのDeclarationsを参照)、およびネイティブコンパイラ(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)