GNU Info

Info Node: (elisp)Type Predicates

(elisp)Type Predicates


Next: Equality Predicates Prev: Circular Objects Up: Lisp Data Types
Enter node , (file) or (file)node

Type Predicates
===============

   The Emacs Lisp interpreter itself does not perform type checking on
the actual arguments passed to functions when they are called.  It could
not do so, since function arguments in Lisp do not have declared data
types, as they do in other programming languages.  It is therefore up to
the individual function to test whether each actual argument belongs to
a type that the function can use.

   All built-in functions do check the types of their actual arguments
when appropriate, and signal a `wrong-type-argument' error if an
argument is of the wrong type.  For example, here is what happens if you
pass an argument to `+' that it cannot handle:

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

   If you want your program to handle different types differently, you
must do explicit type checking.  The most common way to check the type
of an object is to call a "type predicate" function.  Emacs has a type
predicate for each type, as well as some predicates for combinations of
types.

   A type predicate function takes one argument; it returns `t' if the
argument belongs to the appropriate type, and `nil' otherwise.
Following a general Lisp convention for predicate functions, most type
predicates' names end with `p'.

   Here is an example which uses the predicates `listp' to check for a
list and `symbolp' to check for a symbol.

     (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))))

   Here is a table of predefined type predicates, in alphabetical order,
with references to further information.

`atom'
     Note: atom.

`arrayp'
     Note: arrayp.

`bool-vector-p'
     Note: bool-vector-p.

`bufferp'
     Note: bufferp.

`byte-code-function-p'
     Note: byte-code-function-p.

`case-table-p'
     Note: case-table-p.

`char-or-string-p'
     Note: char-or-string-p.

`char-table-p'
     Note: char-table-p.

`commandp'
     Note: commandp.

`consp'
     Note: consp.

`display-table-p'
     Note: display-table-p.

`floatp'
     Note: floatp.

`frame-configuration-p'
     Note: frame-configuration-p.

`frame-live-p'
     Note: frame-live-p.

`framep'
     Note: framep.

`functionp'
     Note: functionp.

`integer-or-marker-p'
     Note: integer-or-marker-p.

`integerp'
     Note: integerp.

`keymapp'
     Note: keymapp.

`keywordp'
     Note: Constant Variables.

`listp'
     Note: listp.

`markerp'
     Note: markerp.

`wholenump'
     Note: wholenump.

`nlistp'
     Note: nlistp.

`numberp'
     Note: numberp.

`number-or-marker-p'
     Note: number-or-marker-p.

`overlayp'
     Note: overlayp.

`processp'
     Note: processp.

`sequencep'
     Note: sequencep.

`stringp'
     Note: stringp.

`subrp'
     Note: subrp.

`symbolp'
     Note: symbolp.

`syntax-table-p'
     Note: syntax-table-p.

`user-variable-p'
     Note: user-variable-p.

`vectorp'
     Note: vectorp.

`window-configuration-p'
     Note: window-configuration-p.

`window-live-p'
     Note: window-live-p.

`windowp'
     Note: windowp.

   The most general way to check the type of an object is to call the
function `type-of'.  Recall that each object belongs to one and only
one primitive type; `type-of' tells you which one (Note: Lisp Data
Types).  But `type-of' knows nothing about non-primitive types.  In
most cases, it is more convenient to use type predicates than `type-of'.

 - Function: type-of object
     This function returns a symbol naming the primitive type of
     OBJECT.  The value is one of the symbols `symbol', `integer',
     `float', `string', `cons', `vector', `char-table', `bool-vector',
     `hash-table', `subr', `compiled-function', `marker', `overlay',
     `window', `buffer', `frame', `process', or `window-configuration'.

          (type-of 1)
               => integer
          (type-of 'nil)
               => symbol
          (type-of '())    ; `()' is `nil'.
               => symbol
          (type-of '(x))
               => cons


automatically generated by info2www version 1.2.2.9