**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:**

**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,

The following X3J13 cleanup issues,