Emacs LISP使用的是dynamic binding, 而SCHEME和Common LISP等使用的是Lexical binding。在Emacs 24之后可以使用下述方式来实现closure
(setq lexical-binding t)
(defun mycons (x y)
(lambda (k)
(cond ((= k 0) x)
((= k 1) y)
(t (error "Argument not 0 or 1 -- CONS" k)))))
(defun mycar (z)
(funcall z 0))
(defun mycdr (z)
(funcall z 1))
(mycar (mycons 100 2000)) ;; => 100
(mycdr (mycons 'a 'b)) ;; => b