“汎変数”または“placeフォーム”は値を格納できるLispメモリ中の多くの 場所の一つである。最も単純なplaceフォームは通常のLisp変数である。 しかしリストのcarやcdr、配列の要素、シンボルの属性、そして多くの他の 場所もLispの値が格納される場所である。
setf
フォームはsetq
に似ているが、単なるシンボルではなく
左辺に任意のplaceフォームを受け入れる点が異なる。たとえば、
(setf (car a) b)
はa
のcarをb
に設定する。これは
(setcar a b)
と同じ作用だが、すべての場所型の設定と
アクセスのために2個の別の関数を憶える必要がない。
汎変数はC言語の“左辺値”と類似しており、同じ表記法を使って
‘x = a[i]’は配列から要素を取得し‘a[i] = x’は要素を格納する。
Cではa[i]
のようなある種のフォームだけが左辺値になり得るが、Lisp
には汎変数になり得るフォームの集合がある。
• 基本的setf: | ‘setf’とplaceフォーム | |
• 修正マクロ: | ‘incf’、‘push’、‘rotatef’、‘letf’、‘callf’、その他 | |
• setf独自化: | ‘define-modify-macro’、‘defsetf’、‘define-setf-method’ |