setf expansion

setf 式を展開するのに使う5つの値。get-setf-expansion(xyzzy だと get-setf-method-multiple-value)で取得できるあれ。何度読んでも覚えられないので中途半端だけどメモ。

(setf (ACCESSOR . ARGS) NEW-VALUE)

temporary variables

評価時に ARGS の値を保持する変数(symbol)のリスト。通常は gensym のリスト。

value forms

ARGS の値を返す式のリスト。通常 ARGS の式をそのまま使う。ARGS のうちいくつかを評価する必要がない場合に、それを除外することもできるように?

store variables

評価時に NEW-VALUE の値を保持するための変数(symbol)のリスト。

storing form

temporary variables と store variables を使って PLACE の値を更新する式。
大雑把に言うと、単純な setf 式はこう展開される。

(let* ((#:temp-0 value-0)
       (#:temp-1 value-1)
       ..
       (#:store NEW-VALUE))
  <storing form>)

この式の戻り値がそのまま setf 式の戻り値になるので、store variables の値を返しましょう。

accessing form

temporary variables を使って PLACE の値を参照する式。たぶん setf(の展開形)を評価する時に、ARGS の式を複数回評価することを避けつつ更新前の値を参照するためのものだと思う。 shiftf とか rotatef とかで使うんでしょう(未確認)。