ANSI Common Lisp 5 Data and Control Flow 5.3 Dictionary of Data and Control Flow
- Arguments and Values:
name - a function name or lambda expression.
function - a function object.
The value of function is the functional value of name
in the current lexical environment.
If name is a function name, the functional definition of that name
established by the innermost lexically enclosing
flet, labels, or macrolet form,
if there is one. Otherwise the global functional definition of the
If name is a lambda expression, then a lexical closure
is returned. In situations where a closure over the same set of
bindings might be produced more than once, the various resulting
closures might or might not be eq.
It is an error to use function on a function name
that does not denote a function in the lexical environment in
which the function form appears.
Specifically, it is an error to use function on a symbol
that denotes a macro or special form.
An implementation may choose not to signal this error for
performance reasons, but implementations are forbidden from
defining the failure to signal an error as a useful behavior.
(defun adder (x) (function (lambda (y) (+ x y))))
The result of (adder 3) is a function that adds 3 to its argument:
(setq add3 (adder 3))
(funcall add3 5) 8
This works because function creates a closure of
the lambda expression that is able to refer to the value 3
of the variable x even after control has returned from the function adder.
- See Also:
Section 18.104.22.168.1 Symbols as Forms,
Section 22.214.171.124 Sharpsign Single-Quote,
Section 126.96.36.199 Printing Other Objects
The notation #'name may be used as an abbreviation
for (function name).
- Allegro CL Implementation Details: