好吧,我重新仔细看了一下文档,以下是我的理解。
由:
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#placeplace 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#formform 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来修改(具体怎么修改我不想再深入了,搞到这个地步够我用了-.-)。
还请更多人来讨论啊。。。我们都是菜鸟,需要更多关爱