(defun (setf xwin-border-width) (width win)
(setf (xlib:drawable-border-width win) width))
那么如何调用上面的函数呢?事实上,我真的不明白“(setf xwin-border-width)”代替功能时间是什么意思?
此致!
答案 0 :(得分:5)
这定义了setf
函数。您可以使用(setf (xwin-border-width *some-window*) width)
调用它。
您可能会发现setf
的文档很有用:http://www.lispworks.com/documentation/lw50/CLHS/Body/m_setf_.htm
Hyperspec还有一个关于通用引用的部分:http://www.lispworks.com/documentation/lw50/CLHS/Body/05_a.htm
答案 1 :(得分:1)
通过制作第一个参数来解析这个形式(setf f)
,你可以定义当setf
的第一个参数是对f的调用时会发生什么。
(defun foo (lst) (car lst))
(defun (setf foo) (val lst)
(setf (car lst) val))
上面的一对函数将foo定义为car的同义词。在名称格式为(setf f)
的函数的定义中,第一个参数表示新值,其余参数表示f的参数。
现在任何setf
到foo
都会调用上面的后一个函数:
? (let ((z (list 1 2 3)))
(setf (foo z) 168)
z)
(168 2 3)
不必定义foo
来定义`(setf foo),但它们通常成对出现。
检查Paul Graham的第6章ANSI Common Lisp的功能。