“汎変数”または“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’ |