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” (SeeSymbol 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 SeeFunction 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 (SeeFunction Cells).
 However, it is more common to use the ‘defun’ special form, described in
 the next section.  SeeDefining 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 (SeePrimitive 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.)