(rontolisp) docs
← マクロ

setf

(setf place value [place2 value2 ...])

汎用的な代入です。valueplace で指定した場所に格納し、その値を返します。単純な変数のほかに、サポートされる place としてリストのアクセサ carcdrnthfirst から fourthrest、および caXXXr の合成、さらに elt (実行時にリスト/配列をディスパッチします。文字列は不変のままです) があり、既存の構造の特定のスロットをその場で変更できます。適切なプリミティブな変更操作(rplacarplacd など)に展開されます。place の部分フォームは値より先に評価されるため、末尾収集イディオム (setf (cdr tail) (setf tail (list x))) は古い tail に連結します。

複数の place/value ペアは逐次的に代入され (後のペアは前のペアの効果を参照できます)、最後の値が返されます。

組み込みの place のほかに、defstruct のアクセサ、CLOS の :accessor、そしてユーザー定義の setf 関数 ((defun (setf name) ...)) も place になります。(setf (name arg...) value) は新しい値を先頭にして書き込み関数を呼び出します。setf 関数の定義については defun を参照してください。