For any other compound form for which the operator is a
symbol f,
the setf form expands into a call
to the function named (setf f)
.
The first argument in the newly constructed function form
is newvalue and the
remaining arguments are the remaining elements of
place.
This expansion occurs regardless of whether f or (setf f)
is defined as a function locally, globally, or not at all.
For example,
(setf (f arg1 arg2 ...) new-value)
expands into a form with the same effect and value as
(let ((#:temp-1 arg1) ;force correct order of evaluation
(#:temp-2 arg2)
...
(#:temp-0 new-value))
(funcall (function (setf f)) #:temp-0 #:temp-1 #:temp-2...))
A function named (setf f)
must return its first argument
as its only value in order to preserve the semantics of setf.