setf 与getf
lisp吧
全部回复
仅看楼主
level 9
_湖心龙 楼主
getf到底是返回什么的啊。。。为什么可以(setf (getf xx :yy) 'zz)这样用?
我在lispworks 的在线文档里看到的是=>value
http://www.lispworks.com/documentation/HyperSpec/Body/f_getf.htm#getf
谁来解释一下。。。
还有什么object和form
2013年04月26日 08点04分 1
level 8
原因在于setf, 同理可以(setf (car x) y)等
2013年04月26日 16点04分 2
level 9
_湖心龙 楼主
setf的第一个参数是place吧,还望更详细解释下place啊
2013年04月27日 16点04分 3
level 8
getf car本身不被调用,他们只是告诉setf怎么去改。例如你定义了一个mycar,你想用setf,就得定义(defun (setf mycar) (..去告诉setf怎么改
2013年04月27日 23点04分 4
level 9
_湖心龙 楼主
好吧,我重新仔细看了一下文档,以下是我的理解。
由:
http://www.lispworks.com/documentation/HyperSpec/Body/m_setf_.htm#setf
可知,setf是个宏(早该看到了的T_T),所以,传递给他的两个参数都不会在一开始就被求值,也就是说,如果是(setf (car '(a b c) 'd)这样的语句的话,传递给seft的不是'a 和'd,而是(car '(a b c))这样一整个的“语句”。
Syntax:
setf {pair}* => result*
pair::= place newvalue
place——a place
然后又去看了一下place的定义:
http://www.lispworks.com/documentation/HyperSpec/Body/26_glo_p.htm#place
place n.
1. a form which is suitable for use as a generalized reference.
2. the conceptual location referred to by such a place[1].
我来试着翻译一下:
1.这个place就是一个适合用于一般引用的form。
2.一个由place代表的位置的概念。
然后是form的文档。。。
http://www.lispworks.com/documentation/HyperSpec/Body/26_glo_f.htm#form
form n.
1. any object meant to be evaluated.
2. a symbol, a compound form, or a self-evaluating object.
3. (for an operator, as in ``<<operator>> form'') a compound form having that operator as its first element. ``A quote form is a constant form.''
我就不翻译了。
于是,我的总结就是:
1.place就是那些可以用于列表里面元素定位的特殊form,而form大致就相当于C里的一条语句(不知道这样解释对不对)。
2.setf传递一个place进去,然后根据这个place来修改(具体怎么修改我不想再深入了,搞到这个地步够我用了-.-)。
还请更多人来讨论啊。。。我们都是菜鸟,需要更多关爱[88]
2013年04月28日 02点04分 5
level 9
_湖心龙 楼主
5楼有地方写错了。。。
第五行的(setf (car '(a b c) 'd)应该是:(setf (car '(a b c)) 'd)
果然纯手打没编辑器就是会出错。。。
2013年04月28日 02点04分 6
level 12
stef将第二个参数的值作为第一个参数的返回,至于getf返回的值得视具体环境而定
2013年05月02日 02点05分 7
level 11
getf不是从plist里读取信息的么……
>(getf (list :a 'b) :a)
B
[瞌睡]求妹纸~
2013年05月09日 15点05分 8
(setf (getf (list :a 'b) :a) 'c)那那个list就变成(:a 'c)了,就这个意思。
2013年05月09日 15点05分
level 11
(setf (getf xx :yy) 'zz)
这个意思是把xx列表(这是一个plist)里的:yy对应的信息改成'zz
[瞌睡]求妹纸~
2013年05月09日 15点05分 9
喔喔,终于出现了!!![Love]
2013年05月10日 12点05分
1