declare (
declaration
*)
There are two distinct uses of
declare
, 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
declare
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
let
,
do
,
defun
, etc.
(Consult the syntax definition of each special form to see if it takes declare forms and/or documentation strings.)
See the
LispWorks Reference Manual
for more detailed information on
declare
, including some LispWorks extensions to Common Lisp.
proclaim
declaration-list
declaration-list must be a list of declaration forms to be put into immediate and pervasive effect.
Unlike
declare
,
proclaim
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
proclaim
.
(proclaim '(special *fred*))
(proclaim '(type single-float x y z))
(proclaim '(optimize (safety 0) (speed 3)))
As
proclaim
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
special
.