(defun (setf f) val params)

本文介绍了Common Lisp中使用setf宏来修改由其他函数返回的值的方式,并通过实例展示了如何定义特定的setf方法来改变由某个函数返回的数据结构。

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

转载于:https://www.cnblogs.com/flowjacky/archive/2013/01/02/2842259.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值