Constant folding is an optimization that replaces a call of constant arguments with the constant result of that call. Constant folding is done on all standard functions for which it is legal. Inline expansion allows folding of any constant parts of the definition, and can be done even on functions that have side-effects.
It is convenient to rely on constant folding when programming, as in this example:
Constant folding is also helpful when writing macros or inline functions, since it usually eliminates the need to write a macro that special-cases constant arguments.(defconstant limit 42)(defun foo () (... (1- limit) ...))
Constant folding of a user defined function is enabled by the extensions:constant-function proclamation. In this example:
The call to myexp is constant-folded to 4.1711674.(declaim (ext:constant-function myfun)) (defun myexp (x y) (declare (single-float x y)) (exp (* (log x) y)))... (myexp 3.0 1.3) ...