関数で定義した局所変数に、ほかの関数からアクセスできる場合がある。
(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 Lisp 、Scheme の場合はトップレベルで定義された a の値 "world" を表示する。
- lexical 語彙の、語彙的な、単語の
- scope 行動・思考・知覚などの範囲、領域