[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

(setf (apply #'foo

According to the manual, (setf (apply #'foo x y) z) is defined only when
(setf (foo x y) z) expands to something of the form (set-foo z x y). In
this case the original SETF expands to (apply #'set-foo z x y). I claim
that this statement is vacuous.  The problem is that no SETF form can
expand in this way.  To do so would violate the provision that SETF
must preserve left to right evaluation.  Certainly left to right
evaluation can be preserved by complex patterns involving LET, etc.
However in the case where SETF expands to a simple function call, it
is clear that the arguments must be in the same order as the arguments
to the original SETF.  In that case, the new value must be last, which
violates the preconditions for (SETF (APPLY