ダイナミックスコープ

関数で定義した局所変数に、ほかの関数からアクセスできる場合がある。

(defun foo ()
 (let ((a "Hello")) 
   (print a)
   (bar)))

(defun bar () (print a))

(setq a "world")

(bar)  ;; => "world"

(foo)  ;; => "Hello"
             "Hello" (Emacs  Lisp の場合)
             "world" (Common Lisp の場合。Scheme も同じ)

ダイナミックスコープである Emacs Lisp の関数 bar はlocal 変数 a の値 "Hello" を表示するが、レキシカル(lexical)スコープであるCommon LispScheme の場合はトップレベルで定義された a の値 "world" を表示する。

  • lexical 語彙の、語彙的な、単語の
  • scope 行動・思考・知覚などの範囲、領域