CLHS: Accessor SYMBOL-FUNCTION

#

Accessor SYMBOL-FUNCTION

Syntax:

symbol-function symbol => contents

`(setf (`symbol-function symbol`)` new-contents`)`

Arguments and Values:

symbol---a symbol.

contents--- If the symbol is globally defined as a macro or a special operator, an object of implementation-dependent nature and identity is returned. If the symbol is not globally defined as either a macro or a special operator, and if the symbol is fbound, a function object is returned.

new-contents---a function.

Description:

Accesses the symbol's function cell.

Examples:

     (symbol-function 'car) =>  #<FUNCTION CAR>
     (symbol-function 'twice) is an error   ;because TWICE isn't defined.
     (defun twice (n) (* n 2)) =>  TWICE
     (symbol-function 'twice) =>  #<FUNCTION TWICE>
     (list (twice 3)
           (funcall (function twice) 3)
           (funcall (symbol-function 'twice) 3))
    =>  (6 6 6)
     (flet ((twice (x) (list x x)))
       (list (twice 3)
             (funcall (function twice) 3)
             (funcall (symbol-function 'twice) 3)))
    =>  ((3 3) (3 3) 6)
     (setf (symbol-function 'twice) #'(lambda (x) (list x x)))
    =>  #<FUNCTION anonymous>
     (list (twice 3)
           (funcall (function twice) 3)
           (funcall (symbol-function 'twice) 3))
    =>  ((3 3) (3 3) (3 3))
     (fboundp 'defun) =>  true
     (symbol-function 'defun)
    =>  implementation-dependent
     (functionp (symbol-function 'defun))
    =>  implementation-dependent
     (defun symbol-function-or-nil (symbol)
       (if (and (fboundp symbol)
                (not (macro-function symbol))
                (not (special-operator-p symbol)))
           (symbol-function symbol)
           nil)) =>  SYMBOL-FUNCTION-OR-NIL
     (symbol-function-or-nil 'car) =>  #<FUNCTION CAR>
     (symbol-function-or-nil 'defun) =>  NIL

Side Effects: None.

Affected By:

defun

Exceptional Situations:

Should signal an error of type type-error if symbol is not a symbol.

Should signal undefined-function if symbol is not fbound and an attempt is made to read its definition. (No such error is signaled on an attempt to write its definition.)

See Also:

fboundp, fmakunbound, macro-function, special-operator-p

Notes:

symbol-function cannot access the value of a lexical function name produced by flet or labels; it can access only the global function value.

setf may be used with symbol-function to replace a global function definition when the symbol's function definition does not represent a special operator.

    (symbol-function symbol) ==  (fdefinition symbol)

However, fdefinition accepts arguments other than just symbols.

The following X3J13 cleanup issues, not part of the specification, apply to this section:

- SPECIAL-FORM-P-MISNOMER:RENAME
- FUNCTION-TYPE:X3J13-MARCH-88

Copyright 1996-2005, LispWorks Ltd. All rights reserved.