A name can be given to a function in one of two ways.
A global name can be given to a function by using the
defun construct.
A local name can be given to a function by using the
flet or
labels special form.
When a function is named, a lambda-expression is effectively
associated with that name
along with information about the entities that are lexically apparent
at that point.
If a symbol appears as the first element of a function-call form, then it
refers to the definition established by the innermost flet or labels
construct that textually contains the reference, or to the global
definition (if any) if there is no such containing construct.