Next: Equality Predicates, Previous: Circular Objects, Up: Lisp Data Types [Contents][Index]
関数が呼び出されたとき、Emacs Lispインタープリター自身はその関数に渡された実際の引数の型チェックは行ないません。それが行なえないのは、Lispにおける関数の引数は他のプログラミング言語のようなデータ型宣言をもたないからです。したがって実際の引数が、その関数が使用できる型に属するかどうかをテストするのは、それぞれの関数に任されています。
すべてのビルトイン関数は適切なときに実際の引数の型チェックを行い、引数の型が違う場合はwrong-type-argumentエラーをシグナルします。たとえば以下は、+の引数に+が扱うことができない引数を渡したとき何が起こるかの例です:
(+ 2 'a)
error→ Wrong type argument: number-or-marker-p, a
異なる型にたいして異なる処理をプログラムに行なわせる場合は、明示的に型チェックを行なわなければなりません。オブジェクトの型をチェックするもっとも一般的な方法は型述語(type predicate)関数の呼び出しです。Emacsはそれぞれの型にたいする型述語をもち、組み合わされた型にたいする述語もあります。
型述語関数は1つの引数をとり、その引数が適切な型であればt、そうでなければnilをリターンします。述語関数にたいする一般的なLisp慣習にしたがい、ほとんどの型述語の名前は‘p’で終わります。
以下はリストにたいしてチェックを行なう述語listpと、シンボルにたいしてチェックを行なう述語symbolpの例です。
(defun add-on (x)
(cond ((symbolp x)
;; XがシンボルならLISTにputする
(setq list (cons x list)))
((listp x)
;; Xがリストならその要素をLISTに追加
(setq list (append x list)))
(t
;; シンボルとリストだけを処理する
(error "Invalid argument %s in add-on" x))))
以下のテーブルは事前定義された型述語(アルファベット順)と、さらに情報を得るためのリファレンスです。
atomatomを参照のこと。
arrayparraypを参照のこと。
bool-vector-pbool-vector-pを参照のこと。
bufferpbufferpを参照のこと。
byte-code-function-pbyte-code-function-pを参照のこと。
case-table-pcase-table-pを参照のこと。
char-or-string-pchar-or-string-pを参照のこと。
char-table-pchar-table-pを参照のこと。
commandpcommandpを参照のこと。
conspconspを参照のこと。
custom-variable-pcustom-variable-pを参照のこと。
display-table-pdisplay-table-pを参照してください。
floatpfloatpを参照のこと。
fontpLow-Level Fontを参照のこと。
frame-configuration-pframe-configuration-pを参照のこと。
frame-live-pframe-live-pを参照のこと。
framepframepを参照のこと。
functionpfunctionpを参照のこと。
hash-table-phash-table-pを参照のこと。
integer-or-marker-pinteger-or-marker-pを参照のこと。
integerpintegerpを参照のこと。
keymappkeymappを参照のこと。
keywordpConstant Variablesを参照のこと。
listplistpを参照のこと。
markerpmarkerpを参照のこと。
wholenumpwholenumpを参照のこと。
nlistpnlistpを参照のこと。
numberpnumberpを参照のこと。
number-or-marker-pnumber-or-marker-pを参照のこと。
overlaypoverlaypを参照のこと。
processpprocesspを参照のこと。
sequencepsequencepを参照のこと。
stringpstringpを参照のこと。
subrpsubrpを参照のこと。
symbolpsymbolpを参照のこと。
syntax-table-psyntax-table-pを参照のこと。
vectorpvectorpを参照のこと。
window-configuration-pwindow-configuration-pを参照のこと。
window-live-pwindow-live-pを参照のこと。
windowpwindowpを参照のこと。
booleanpbooleanpを参照のこと。
string-or-null-pstring-or-null-pを参照のこと。
あるオブジェクトがどの型かチェックするもっとも一般的な方法は、関数type-ofの呼び出しです。オブジェクトは、ただ1つだけの基本型に属することを思い出してください。type-ofは、それがどの型かを告げます(Lisp Data Typesを参照)。しかしtype-ofは基本型以外の型については何も知りません。ほとんどの場合では、type-ofより型述語を使用するほうが便利でしょう。
この関数はobjectの基本型を名前とする、シンボルをreturnします。retuen値はシンボルbool-vector、buffer、char-table、compiled-function、cons、float、font-entity、font-object、font-spec、frame、hash-table、integer、marker、overlay、process、string、subr、symbol、vector、window、window-configurationのうちの1つです。
(type-of 1)
⇒ integer
(type-of 'nil)
⇒ symbol
(type-of '()) ; ()はnilです。
⇒ symbol
(type-of '(x))
⇒ cons
Next: Equality Predicates, Previous: Circular Objects, Up: Lisp Data Types [Contents][Index]