elisp: Function Cells

 
 12.9 Accessing Function Cell Contents
 =====================================
 
 The “function definition” of a symbol is the object stored in the
 function cell of the symbol.  The functions described here access, test,
 and set the function cell of symbols.
 
    See also the function ‘indirect-function’.  SeeDefinition of
 indirect-function.
 
  -- Function: symbol-function symbol
      This returns the object in the function cell of SYMBOL.  It does
      not check that the returned object is a legitimate function.
 
      If the function cell is void, the return value is ‘nil’.  To
      distinguish between a function cell that is void and one set to
      ‘nil’, use ‘fboundp’ (see below).
 
           (defun bar (n) (+ n 2))
           (symbol-function 'bar)
                ⇒ (lambda (n) (+ n 2))
           (fset 'baz 'bar)
                ⇒ bar
           (symbol-function 'baz)
                ⇒ bar
 
    If you have never given a symbol any function definition, we say that
 that symbol’s function cell is “void”.  In other words, the function
 cell does not have any Lisp object in it.  If you try to call the symbol
 as a function, Emacs signals a ‘void-function’ error.
 
    Note that void is not the same as ‘nil’ or the symbol ‘void’.  The
 symbols ‘nil’ and ‘void’ are Lisp objects, and can be stored into a
 function cell just as any other object can be (and they can be valid
 functions if you define them in turn with ‘defun’).  A void function
 cell contains no object whatsoever.
 
    You can test the voidness of a symbol’s function definition with
 ‘fboundp’.  After you have given a symbol a function definition, you can
 make it void once more using ‘fmakunbound’.
 
  -- Function: fboundp symbol
      This function returns ‘t’ if the symbol has an object in its
      function cell, ‘nil’ otherwise.  It does not check that the object
      is a legitimate function.
 
  -- Function: fmakunbound symbol
      This function makes SYMBOL’s function cell void, so that a
      subsequent attempt to access this cell will cause a ‘void-function’
      error.  It returns SYMBOL.  (See also ‘makunbound’, in SeeVoid
      Variables.)
 
           (defun foo (x) x)
           (foo 1)
                ⇒1
           (fmakunbound 'foo)
                ⇒ foo
           (foo 1)
           error→ Symbol's function definition is void: foo
 
  -- Function: fset symbol definition
      This function stores DEFINITION in the function cell of SYMBOL.
      The result is DEFINITION.  Normally DEFINITION should be a function
      or the name of a function, but this is not checked.  The argument
      SYMBOL is an ordinary evaluated argument.
 
      The primary use of this function is as a subroutine by constructs
      that define or alter functions, like ‘defun’ or ‘advice-add’ (See
      Advising Functions).  You can also use it to give a symbol a
      function definition that is not a function, e.g., a keyboard macro
      (SeeKeyboard Macros):
 
           ;; Define a named keyboard macro.
           (fset 'kill-two-lines "\^u2\^k")
                ⇒ "\^u2\^k"
 
      It you wish to use ‘fset’ to make an alternate name for a function,
      consider using ‘defalias’ instead.  SeeDefinition of defalias.