(defun (setf xwin-border-width) (width win)
(setf (xlib:drawable-border-width win) width))
then how to call the above function ? In fact i donot really understand what "(setf xwin-border-width)" means in place of function time ?
Sincerely !
(defun (setf xwin-border-width) (width win)
(setf (xlib:drawable-border-width win) width))
then how to call the above function ? In fact i donot really understand what "(setf xwin-border-width)" means in place of function time ?
Sincerely !
这定义了一个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
通过将第一个参数设为这种形式的 defun (setf f)
,您可以定义当第一个参数 tosetf
是对 f 的调用时会发生什么。
(defun foo (lst) (car lst))
(defun (setf foo) (val lst)
(setf (car lst) val))
上面这对函数将 foo 定义为 car 的同义词。在名称为 形式的函数的定义中(setf f)
,第一个参数表示新值,其余参数表示 f 的参数。
现在 any setf
tofoo
将调用上面的后一个函数:
? (let ((z (list 1 2 3)))
(setf (foo z) 168)
z)
(168 2 3)
不必foo
为了定义`(setf foo)而定义,但它们通常成对出现。
查看 Paul Graham 的第 6 章 ANSI Common Lisp 函数。