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. See Definition 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 is void, the return value is
nil.(defun bar (n) (+ n 2)) (symbol-function 'bar) ⇒ #f(lambda (n) [t] (+ n 2))(fset 'baz 'bar) ⇒ bar(symbol-function 'baz) ⇒ bar
If you have never given a symbol any function definition, its function cell contains the default value nil and we say that that function is void. If you try to call the symbol as a function, Emacs signals a void-function error.
Unlike with void variables (see When a Variable is Void), a symbol’s function cell that contains nil is indistinguishable from the function’s being void. Note that void is not the same as the symbol void: void can be a valid function if you define it with defun.
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
tif the symbol has a non-nilobject in its function cell,nilotherwise. It does not check that the object is a legitimate function.
- Function: fmakunbound symbol
-
This function makes symbol’s function cell
nil, so that a subsequent attempt to access this cell will cause avoid-functionerror. It returns symbol. (See alsomakunbound, 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
- 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
defunoradvice-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") ⇒ "\^u2\^k"If you wish to use
fsetto make an alternate name for a function, consider usingdefaliasinstead. See Definition of defalias.If the resulting function definition chain would be circular, then Emacs will signal a
cyclic-function-indirectionerror.
Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Function-Cells.html