(defun (setf xwin-border-width) (width win)
(setf (xlib:drawable-border-width win) width))
次に、上記の関数を呼び出す方法は?実際、関数時間の代わりに「(setf xwin-border-width)」が何を意味するのか本当にわかりませんか?
心から !
(defun (setf xwin-border-width) (width win)
(setf (xlib:drawable-border-width win) width))
次に、上記の関数を呼び出す方法は?実際、関数時間の代わりに「(setf xwin-border-width)」が何を意味するのか本当にわかりませんか?
心から !
これは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
この形式を無効にする最初の引数を作成することにより、の最初の引数がfの呼び出しである(setf f)
場合に何が起こるかを定義しますsetf
。
(defun foo (lst) (car lst))
(defun (setf foo) (val lst)
(setf (car lst) val))
上記の関数のペアは、fooをcarの同義語として定義しています。名前がの形式の関数の定義では(setf f)
、最初のパラメーターは新しい値を表し、残りのパラメーターはfへの引数を表します。
これで、toは上記の後者の関数の呼び出しになりますsetf
。foo
? (let ((z (list 1 2 3)))
(setf (foo z) 168)
z)
(168 2 3)
`(setf foo)を定義するために定義する必要はありませんfoo
が、通常はペアで提供されます。
PaulGrahamによる第6章ANSICommonLispの機能を確認してください。