kobapan@wiLiki
Login
Emacs

Emacs:setとsetfとsetqの違い

setq

setq は変数へ値を代入する伝統的な形式。BASIC や C でいう「代入 = 」に相当するモノ。

(setq <var_name> <form>)

<var_name> は評価されない。setq の q は quote の q。

setq の実装は「特殊形式」なので、局所変数への代入にも使える。

set

set は quote の無い setq

(set <var_name> <form>)

<var_name> の部分が評価されて、代入先を動的に変えられる。

set の実装が「関数」になっているので、局所変数への代入には使うことができない。

setf

(setf <place> <form>)

第一引数 <place>を評価する。<place>には、特殊変数や局所変数の他に、任意の「場所」を指定してやることが可能。

(setf (nth 2 x) 9)

は、リスト x の3番目の要素への代入になる。

<place> に任意の場所を指定できるが、プログラマが独自の場所を指定してやりたい場合は、defsetf や define-setf-methodを使って、その場所への格納方法を Lisp に教えておいてやる必要がある。

上記の例の nth などの場合は、あらかじめ組み込まれている。

A call to any of the following standard Lisp functions:
          aref      cddr      symbol-function
          car       elt       symbol-plist
          caar      get       symbol-value
          cadr      gethash
          cdr       nth
          cdar      nthcdr

A call to any of the following Emacs-specific functions:
          default-value                 process-get
          frame-parameter               process-sentinel
          terminal-parameter            window-buffer
          keymap-parent                 window-display-table
          match-data                    window-dedicated-p
          overlay-get                   window-hscroll
          overlay-start                 window-parameter
          overlay-end                   window-point
          process-buffer                window-start
          process-filter

 

Debian
Emacs
Firefox
Gauche
JavaScript
Linux
Scheme
org-mode/latex

More ...