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. See Definition of indirect-function.
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
distinguish between a function cell that is void and one set to
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
Note that void is not the same as
nil or the symbol
void. The symbols
void are Lisp objects,
and can be stored into a function cell just as any other object can be
void can be a valid function if you define it 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
This function returns
t if the symbol has an object in its
nil otherwise. It does not check that the object
is a legitimate function.
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 When a Variable is Void.)
(defun foo (x) x) (foo 1) ⇒1
(fmakunbound 'foo) ⇒ foo
(foo 1) error→ Symbol's function definition is void: foo
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
advice-add (see Advising Emacs Lisp Functions). You can also use it to give a symbol a function definition that
is not a function, e.g., a keyboard macro (see Keyboard Macros):
;; Define a named keyboard macro.
(fset 'kill-two-lines "\^u2\^k")
If you wish to use
fset to make an alternate name for a
function, consider using
defalias instead. See Definition of defalias.