Emacs 24の新しい字句スコープ機能がなぜそれほど素晴らしいのか理解できない理由は、それらなしでは実装できなかった新しい機能を考えることができないからです。たとえば、次のクロージャー:
(setq lexical-binding t)
(defun f1 (num1)
(lambda (num2)
(setq num1 (* num1 num2))))
(fset 'f2 (f1 5))
==> (closure ((num1 . 5) t) (num2) (setq num1 (* num1 num2)))
(f2 5)
==> 25
(f2 2)
==> 50
次のような通常の動的スコープで実装できます。
(defun f1 (num)
(let ((tmpvar (make-symbol "num")))
(set tmpvar num)
`(lambda (num2)
(set ',tmpvar (* (eval ,tmpvar) num2)))))
(fset 'f2 (f1 5))
==> (lambda (num2) (set (quote num) (+ (eval num) num2)))
(f2 5)
==> 25
(f2 2)
==> 50
(fset 'f3 (f1 9))
==> (lambda (num2) (set (quote num) (+ (eval num) num2)))
(f3 3)
==> 27
(f3 2)
==> 54
(f2 10)
==> 500
さて、すべての言語がelispのインターンされていない記号に類似したものを持っているわけではないので、なぜそれらの場合に字句スコープが非常に優れているのか理解しています。しかし、elispはどうですか?字句スコープのおかげで、以前はできなかった(Emacs 24の時点で)今できることは何でも考えられますか?