当defun的第一个参数是(setf f)这样的形式时,是在定义使用(setf (f params) val)时的行为。
例如:
CL-USER> (setf lst (list 'a 'b 'c))
(A B C)
CL-USER> (defun fun (x)
(car x))
FUN
CL-USER> (setf (fun lst) 'f)
;Compiler warnings :
; In an anonymous lambda form: Undeclared free variable LST
; In an anonymous lambda form: Undefined function (SETF FUN)
Invoking restart: Return to SLIME's top level.
; Evaluation aborted on #<CCL::UNDEFINED-FUNCTION-CALL #xC83E9B6>.
CL-USER> (defun (setf fun) (val x)
(setf (car x) val))
(SETF FUN)
CL-USER> (setf (fun lst) 'f)
;Compiler warnings :
; In an anonymous lambda form: Undeclared free variable LST
F
CL-USER> lst
(F B C)
CL-USER>