Go to the first, previous, next, last section, table of contents.


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
See section Predicates on Lists.
arrayp
See section Functions that Operate on Arrays.
bool-vector-p
See section Bool-vectors.
bufferp
See section Buffer Basics.
byte-code-function-p
See section Byte-Code Function Type.
case-table-p
See section The Case Table.
char-or-string-p
See section The Predicates for Strings.
char-table-p
See section Char-Tables.
commandp
See section Interactive Call.
consp
See section Predicates on Lists.
display-table-p
See section Display Tables.
floatp
See section Type Predicates for Numbers.
frame-configuration-p
See section Frame Configurations.
frame-live-p
See section Deleting Frames.
framep
See section Frames.
functionp
See section Functions.
integer-or-marker-p
See section Predicates on Markers.
integerp
See section Type Predicates for Numbers.
keymapp
See section Creating Keymaps.
listp
See section Predicates on Lists.
markerp
See section Predicates on Markers.
wholenump
See section Type Predicates for Numbers.
nlistp
See section Predicates on Lists.
numberp
See section Type Predicates for Numbers.
number-or-marker-p
See section Predicates on Markers.
overlayp
See section Overlays.
processp
See section Processes.
sequencep
See section Sequences.
stringp
See section The Predicates for Strings.
subrp
See section Accessing Function Cell Contents.
symbolp
See section Symbols.
syntax-table-p
See section Syntax Tables.
user-variable-p
See section Defining Global Variables.
vectorp
See section Vectors.
window-configuration-p
See section Window Configurations.
window-live-p
See section Deleting Windows.
windowp
See section Basic Concepts of Emacs Windows.

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 (see section 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, 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


Go to the first, previous, next, last section, table of contents.