(defun (setf f) val params)

当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>

posted @ 2013-01-02 17:22  flowjacky  阅读(294)  评论(0编辑  收藏  举报