declare ( declaration *)
There are two distinct uses of
, one is to declare Lisp variables as "special" (this affects the semantics of the appropriate bindings of the variables), and the other is to provide advice to help the Common Lisp system (in reality the compiler) run your Lisp code faster, or with more sophisticated debugging options.
The special form
behaves computationally as if it is not present (other than to affect the semantics), and is only allowed in certain contexts, such as after the variable list in a
(Consult the syntax definition of each special form to see if it takes declare forms and/or documentation strings.)
LispWorks Reference Manual
for more detailed information on
, including some LispWorks extensions to Common Lisp.
declaration-list must be a list of declaration forms to be put into immediate and pervasive effect.
is a function that parses the declarations in the list (usually a quoted list, note), and puts their semantics and advice into global effect. This can be useful when compiling a file for speedy execution, since a proclamation such as:
(proclaim '(optimize (speed 3) (space 0) (debug 0)))
means that the rest of the file is compiled with these optimization levels in effect. (The other way of doing this is to make appropriate declarations in every function in the file).
This is a macro equivalent to
Below are some examples:
(proclaim '(special *fred*))
(proclaim '(type single-float x y z))
(proclaim '(optimize (safety 0) (speed 3)))
involves parsing a list of lists of symbols and is intended to be used a few times per file, its implementation is not optimized for speed - it makes little sense to use it other than at top level.
Do not forget to quote the argument list if it is a constant list.
(proclaim (special x))
attempts to call function