elisp: Function Names
12.3 Naming a Function
======================
A symbol can serve as the name of a function. This happens when the
symbol’s “function cell” (Symbol Components) contains a function
object (e.g., a lambda expression). Then the symbol itself becomes a
valid, callable function, equivalent to the function object in its
function cell.
The contents of the function cell are also called the symbol’s
“function definition”. The procedure of using a symbol’s function
definition in place of the symbol is called “symbol function
indirection”; see Function Indirection. If you have not given a
symbol a function definition, its function cell is said to be “void”,
and it cannot be used as a function.
In practice, nearly all functions have names, and are referred to by
their names. You can create a named Lisp function by defining a lambda
expression and putting it in a function cell (Function Cells).
However, it is more common to use the ‘defun’ special form, described in
the next section. Defining Functions.
We give functions names because it is convenient to refer to them by
their names in Lisp expressions. Also, a named Lisp function can easily
refer to itself—it can be recursive. Furthermore, primitives can only
be referred to textually by their names, since primitive function
objects (Primitive Function Type) have no read syntax.
A function need not have a unique name. A given function object
_usually_ appears in the function cell of only one symbol, but this is
just a convention. It is easy to store it in several symbols using
‘fset’; then each of the symbols is a valid name for the same function.
Note that a symbol used as a function name may also be used as a
variable; these two uses of a symbol are independent and do not
conflict. (This is not the case in some dialects of Lisp, like Scheme.)