3
(defun (setf xwin-border-width) (width win)
    (setf (xlib:drawable-border-width win) width))

次に、上記の関数を呼び出す方法は?実際、関数時間の代わりに「(setf xwin-border-width)」が何を意味するのか本当にわかりませんか?

心から !

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

この形式を無効にする最初の引数を作成することにより、の最初の引数がfの呼び出しである(setf f)場合に何が起こるかを定義しますsetf

(defun foo (lst) (car lst))

(defun (setf foo) (val lst)
  (setf (car lst) val))

上記の関数のペアは、fooをcarの同義語として定義しています。名前がの形式の関数の定義では(setf f)、最初のパラメーターは新しい値を表し、残りのパラメーターはfへの引数を表します。

これで、toは上記の後者の関数の呼び出しになりますsetffoo

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

`(setf foo)を定義するために定義する必要はありませんfooが、通常はペアで提供されます。

PaulGrahamによる第6章ANSICommonLispの機能を確認してください。

于 2012-06-12T15:26:39.020 に答える