Unlike declare,
proclaim
is a function that parses the declarations in the list (usually a quoted list), 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 the rest of the file is compiled with these optimization levels in effect. Other ways of doing this are:
:optimize
option in defsystem to establish default optimization qualities for every member of the system, when compiled via compile-system.See the LispWorks User Guide for a more extended description.
(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.
Remember to quote the argument list if it is a constant list.
(proclaim (special x))
attempts to call function
special
.
Exercise caution if you declare or proclaim variables to be special without regard to the naming convention that surrounds their names with asterisks.