GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Setting-Generalized-Variables.html ・ emacs-doc.conao3.com

12.17.1 setf マクロ

setf マクロは、一般化変数を操作するための最も基本的な方法です。setf 形式は setq と同様ですが、各ペアの第1引数(左引数)に、単なるシンボルではなく任意のプレイス形式を受け付ける点が異なります。例えば、(setf (car a) b) は a の car を b に設定し、(setcar a b) と同じ操作を行いますが、この種のプレイスの設定と参照に2つの別々の関数を使う必要はありません。

マクロ: setf [place form]…

This macro evaluates form and stores its value in place, which must be a valid generalized variable form. If there are several place and form pairs, the assignments are done sequentially just as with setq. setf returns the value of the last form.

以下のLispフォームは、Emacsにおいて一般化変数として機能するフォームであり、そのためsetfのplace引数に現れることがあります:

setf は、処理方法が不明な place フォームが渡された場合にエラーを通知します。

なお、nthcdr の場合、関数のリスト引数自体が有効な place 形式である必要があります。例えば、(setf (nthcdr 0 foo) 7) は foo 自体を 7 に設定します。

マクロ push(リスト変数の変更を参照)および pop(リスト要素へのアクセスを参照)は、リストだけでなく一般化変数も操作できます。(pop place) は、place に格納されているリストの先頭要素を削除して返します。これは (prog1 (car place) (setf place (cdr place))) と同様ですが、すべてのサブフォームを一度だけ評価する点が異なります。(push x place) は、place に格納されているリストの先頭に x を挿入します。これはサブフォームの評価方法を除けば、(setf place (cons x place)) と同様です。なお、nthcdr 上の push および pop を使用すると、リスト内の任意の位置への挿入や削除が可能です。

同様に、マクロ incf および decf(算術演算を参照)を使用して、数値である一般化変数をインクリメントまたはデクリメントできます。

cl-lib ライブラリは、追加の setf プレースを含む、一般化変数向けのさまざまな拡張を定義しています。Common Lisp Extensions の 一般化変数 を参照してください。