Обновление:
К настоящему времени Emacs 24 официально выпущен и поддерживает лексическое связывание без использования lexical-let
, когда локальная переменная буфера lexical-binding
не равна нулю. Смотрите также M-: (info "(elisp) using lexical binding")
и ответ покиты.
Вы можете использовать lexical-let
из Common Lisp Extensions («пакет CL»):
elisp> (require 'cl)
cl
elisp> (setf power-of-two
(lexical-let ((previous-power-of-two 1))
#'(lambda ()
(setf previous-power-of-two
(* previous-power-of-two 2)))))
(lambda
(&rest --cl-rest--)
(apply
(lambda
(G175638)
(set G175638
(*
(symbol-value G175638)
2)))
'--previous-power-of-two-- --cl-rest--))
elisp> (funcall power-of-two)
2
elisp> (funcall power-of-two)
4
elisp> (funcall power-of-two)
8
Я также слышал о ветке lexbind в GNU Emacs.