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

12.4 変数が void の場合

変数のシンボルに未割り当ての値セルがある場合、その変数は void であると言います(シンボルの構成要素を参照)。

Emacs Lispのデフォルトの動的スコープ規則(変数束縛のスコープ規則を参照)では、値セルに変数の現在の(ローカルまたはグローバル)値が格納されます。なお、値が未割り当ての状態であることは、値セルにnilが入っていることとは異なります。シンボルnilはLispオブジェクトであり、他のあらゆるオブジェクトと同様に変数の値となり得ますが、それでもあくまで値であることに変わりはありません。変数がvoidである場合、その変数を評価しようとすると、値を返す代わりにvoid-variableエラーが発生します。

オプションの字句スコープ規則では、値セルには変数のグローバル値――すなわち、いかなる字句束縛構文の外側にある値――のみが格納される。変数が字句的に束縛されている場合、ローカル値は字句環境によって決定される。したがって、変数のシンボルの値セルが未代入であっても、その変数はローカル値を持ち得る。

関数: makunbound symbol

この関数は値セルをsymbolで空にし、変数をvoidにします。symbolを返します。

変数エイリアス(変数エイリアスを参照)に適用すると、まず変数をそのエイリアスから切り離し、それによって defvaralias の効果を打ち消します。

symbol が動的なローカルバインディングを持つ場合、makunbound は現在のバインディングを無効にし、この無効状態はローカルバインディングが有効である間のみ持続します。その後、以前にシャドウされていたローカルまたはグローバルバインディングが再び参照されるようになり、その参照されたバインディング自体も無効でない限り、変数はもはや無効ではなくなります。

以下に例を挙げます(動的バインディングが有効な場合を想定しています)。

(setq x 1)               ; Put a value in the global binding.
     ⇒ 1
(let ((x 2))             ; Locally bind it.
  (makunbound 'x)        ; Void the local binding.
  x)
error→ Symbol's value as variable is void: x
x                        ; The global binding is unchanged.
     ⇒ 1

(let ((x 2))             ; Locally bind it.
  (let ((x 3))           ; And again.
    (makunbound 'x)      ; Void the innermost-local binding.
    x))                  ; And refer: it’s void.
error→ Symbol's value as variable is void: x

(let ((x 2))
  (let ((x 3))
    (makunbound 'x))     ; Void inner binding, then remove it.
  x)                     ; Now outer let binding is visible.
     ⇒ 2
関数: boundp variable

この関数は、variable(シンボル)が void でない場合は t を、void の場合は nil を返します。

以下に例を挙げます(動的バインディングが有効な場合を想定しています)。

(boundp 'abracadabra)          ; Starts out void.
     ⇒ nil
(let ((abracadabra 5))         ; Locally bind it.
  (boundp 'abracadabra))
     ⇒ t
(boundp 'abracadabra)          ; Still globally void.
     ⇒ nil
(setq abracadabra 5)           ; Make it globally nonvoid.
     ⇒ 5
(boundp 'abracadabra)
     ⇒ t