2.13 Functions

The type function is to be disjoint from cons and symbol, and so a list whose car is lambda is not, properly speaking, of type function, nor is any symbol. However, standard Common Lisp functions that accept functional arguments will accept a symbol or a list whose car is lambda and automatically coerce it to be a function; such standard functions include funcall, apply, and mapcar. Such functions do not, however, accept a lambda-expression as a functional argument; therefore one may not write

(mapcar ’(lambda (x y) (sqrt (* x y))) p q)

but instead one must write something like

(mapcar #’(lambda (x y) (sqrt (* x y))) p q)

This change makes it impermissible to represent a lexical closure as a list whose car is some special marker.

The value of a function special operator will always be of type function.