Defines a new function named function-name in the global environment.
The body of the function defined by defun consists
of forms; they are executed as an implicit progn
when the function is called.
defun can be used
to define a new function,
to install a corrected version of an incorrect definition,
to redefine an already-defined function,
or to redefine a macro as a function.
defun implicitly puts a block named block-name
around the body forms
(but not the forms in the lambda-list)
of the function defined.
Documentation is attached as a documentation string
to name (as kind function)
and to the function object.
Evaluating defun causes function-name to be a global name
for the function specified by the lambda expression
(lambda lambda-list
[[{declaration}* | documentation]]
(block block-name {form}*))
processed in the lexical environment in which defun was executed.
(None of the arguments are evaluated at macro expansion time.)
defun is not required to perform any compile-time side effects.
In particular, defun does not make the function definition available
at compile time. An implementation may choose to store information
about the function for the purposes of compile-time error-checking
(such as checking the number of arguments on calls),
or to enable the function to be expanded inline.