Next: , Previous: , Up: Lisp Data Types   [Contents][Index]


2.6 Type Predicates

Emacs Lispインタープリター自身は、関数が呼び出されたときに、その関数に渡された実際の引数にたいする型チェックは行ないません。それが行なえないのは、Lispにおける関数の引数は、他のプログラミング言語のようなデータ型宣言をもたないからです。したがって実際の引数が、その関数が使用できる型に属するかどうかをテストするのは、それぞれの関数に任されています。

すべてのビルトイン関数は、適切なときに実際の引数の型チェックを行い、引数の型が違う場合は、wrong-type-argumentエラーをシグナルします。たとえば以下は、+の引数に、+が扱うことができない引数を渡したとき何が起こるかの例です:

(+ 2 'a)
     error→ Wrong type argument: number-or-marker-p, a

異なる型にたいして異なる処理をプログラムに行なわせる場合は、明示的に型チェックを行なわなければなりません。オブジェクトの型をチェックするもっとも一般的な方法は、型述語(type predicate)関数の呼び出しです。Emacsはそれぞれの型にたいする型述語をもち、組み合わされた型にたいする述語もあります。

型述語関数は1つの引数をとり、その引数が適切な型であればt、そうでない場合はnilをreturnします。述語関数にたいする一般的なLisp慣習にしたがい、ほとんどの型述語の名前は、‘p’で終わります。

以下はリストにたいしてチェックを行なう述語listpと、シンボルにたいしてチェックを行なう述語symbolpの例です。

(defun add-on (x)
  (cond ((symbolp x)
         ;; If X is a symbol, put it on LIST.
         (setq list (cons x list)))
        ((listp x)
         ;; If X is a list, add its elements to LIST.
         (setq list (append x list)))
        (t
         ;; We handle only symbols and lists.
         (error "Invalid argument %s in add-on" x))))

以下の表は、事前定義された型述語(アルファベット順)と、さらに情報を得るためのリファレンスです。

atom

atomを参照してください。

arrayp

arraypを参照してください。

bool-vector-p

bool-vector-pを参照してください。

bufferp

bufferpを参照してください。

byte-code-function-p

byte-code-function-pを参照してください。

case-table-p

case-table-pを参照してください。

char-or-string-p

char-or-string-pを参照してください。

char-table-p

char-table-pを参照してください。

commandp

commandpを参照してください。

consp

conspを参照してください。

custom-variable-p

custom-variable-pを参照してください。

display-table-p

display-table-pを参照してください。

floatp

floatpを参照してください。

fontp

Low-Level Fontを参照してください。

frame-configuration-p

frame-configuration-pを参照してください。

frame-live-p

frame-live-pを参照してください。

framep

framepを参照してください。

functionp

functionpを参照してください。

hash-table-p

hash-table-pを参照してください。

integer-or-marker-p

integer-or-marker-pを参照してください。

integerp

integerpを参照してください。

keymapp

keymappを参照してください。

keywordp

Constant Variablesを参照してください。

listp

listpを参照してください。

markerp

markerpを参照してください。

wholenump

wholenumpを参照してください。

nlistp

nlistpを参照してください。

numberp

numberpを参照してください。

number-or-marker-p

number-or-marker-pを参照してください。

overlayp

overlaypを参照してください。

processp

processpを参照してください。

sequencep

sequencepを参照してください。

stringp

stringpを参照してください。

subrp

subrpを参照してください。

symbolp

symbolpを参照してください。

syntax-table-p

syntax-table-pを参照してください。

vectorp

vectorpを参照してください。

window-configuration-p

window-configuration-pを参照してください。

window-live-p

window-live-pを参照してください。

windowp

windowpを参照してください。

booleanp

booleanpを参照してください。

string-or-null-p

string-or-null-pを参照してください。

あるオブジェクトがどの型かチェックするもっとも一般的な方法は、関数type-ofの呼び出しです。オブジェクトは、ただ1つだけの基本型に属することを思い出してください。type-ofは、それがどの型(Lisp Data Typesを参照してください)か告げます。しかしtype-ofは基本型以外の型については何も知りません。ほとんどの場合、type-ofより型述語を使用するほうが便利でしょう。

Function: type-of object

この関数はobjectの基本型を名前とする、シンボルをreturnします。retuen値はシンボルbool-vectorbufferchar-tablecompiled-functionconsfloatfont-entityfont-objectfont-specframehash-tableintegermarkeroverlayprocessstringsubrsymbolvectorwindowwindow-configurationのうちの1つです。

(type-of 1)
     ⇒ integer
(type-of 'nil)
     ⇒ symbol
(type-of '())    ; ()nilです。
     ⇒ symbol
(type-of '(x))
     ⇒ cons

Next: , Previous: , Up: Lisp Data Types   [Contents][Index]