http://blog.csdn.net/robinchenyu/article/details/8474876
* emacs中的closure
1. 首先要打开lexical-binding变量(setq lexical-binding t)
2. 测试程序
(let ((lst '(1 2 3 4 5 6 7 8 9)))
(setq get1 (lambda ()
(let ((x (car lst)))
(setq lst (cdr lst))
x)
)))
(funcall get1)
=> 1
(funcall get1)
=> 2
3. 对于闭包的理解
定义:Peter J. Landin 在1964年将术语 闭包 定义为一种包含 环境成分
和 控制成分的实体,用于在他的SECD 机器上对表达式求值。
对于闭包的理解,如果一个函数被定义在一个词法变量的域内,那么它就
能继续引用那个变量,即使这个函数作为值返回到了创建这个变量的上下
文之外。
当一个函数引用在它之外的一个变量时,这个变量就叫做自由变量。而引
用这个自由词法变量的函数叫做闭包。只要这个函数存在,这个变量就必
须存在。
这和c语言中的局部静态变量非常类似