3
(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 !

4

2 回答 2

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

于 2012-05-25T03:59:50.383 回答
1

通过将第一个参数设为这种形式的 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 setftofoo将调用上面的后一个函数:

? (let ((z (list 1 2 3)))
     (setf (foo z) 168)
     z)
(168 2 3)

不必foo为了定义`(setf foo)而定义,但它们通常成对出现。

查看 Paul Graham 的第 6 章 ANSI Common Lisp 函数。

于 2012-06-12T15:26:39.020 回答