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

1.7.2 値を持たないシンボルのエラーメッセージ

値がバインドされていないシンボルを評価しようとすると、エラーメッセージが表示されます。これは、2 + 2 の加算を例に試してみることで確認できます。以下の式において、+ の直後、最初の数値 2 の前にカーソルを置き、C-x C-e と入力してください:

(+ 2 2)

GNU Emacs 22では、次のような内容の*Backtrace*バッファを作成します:

---------- Buffer: *Backtrace* ----------
Debugger entered--Lisp error: (void-variable +)
  eval(+ nil)
  elisp--eval-last-sexp(nil)
  #f(compiled-function () #<bytecode ...>)()
  handler-bind-1(#f(compiled-function () #<bytecode ...>) (error) eval-expression--debug)
  eval-last-sexp(nil)
  funcall-interactively(eval-last-sexp nil)
  call-interactively(eval-last-sexp nil nil)
  command-execute(eval-last-sexp)
---------- Buffer: *Backtrace* ----------

(なお、*Backtrace*バッファにqと入力することで、デバッガを終了できます。)

このバックトレースは、最初に見た「Debugger entered--Lisp error: (void-function this)」というエラーメッセージとは異なります。今回のケースでは、関数が変数として値を持っていません。一方、もう一方のエラーメッセージでは、関数(「this」という文字列)に定義がありませんでした。

この+を用いた実験で行ったことは、Lispインタプリタに+を評価させ、関数定義ではなく変数の値を探させることでした。具体的には、前回のように囲みリストの括弧の後ではなく、シンボルの直後にカーソルを配置することでこれを実現しました。その結果、Lispインタプリタは直前のs式を評価しましたが、この場合は+単体でした。

+ には値がバインドされておらず、関数定義のみであったため、エラーメッセージには変数としてのシンボルの値が void であると報告されました。