相关疑难解决方法(0)

Common Lisp中的动态和词法变量

我正在阅读Peter Seibel撰写的"Practical Common Lisp"一书.

在第6章"变量"部分"词汇变量和闭包"和"动态,又称特殊,变量". http://www.gigamonkeys.com/book/variables.html

我的问题是两个部分中的示例都显示了(让...)如何影响全局变量,并没有真正说明动态和词汇变量之间的区别.

我理解闭包是如何工作的,但我真的不知道在这个例子中让我们如此特别:

(defvar *x* 10)

(defun foo ()
  (format t "Before assignment~18tX: ~d~%" *x*)
  (setf *x* (+ 1 *x*))
  (format t "After assignment~18tX: ~d~%" *x*))


(defun bar ()
  (foo)
  (let ((*x* 20)) (foo))
  (foo))


CL-USER> (foo)
Before assignment X: 10
After assignment  X: 11
NIL


CL-USER> (bar)
Before assignment X: 11
After assignment  X: 12
Before assignment X: 20
After assignment  X: 21
Before assignment X: 12
After assignment  X: 13
NIL
Run Code Online (Sandbox Code Playgroud)

我觉得这里没什么特别的.外FOO …

lisp common-lisp lexical-scope

39
推荐指数
5
解决办法
1万
查看次数

标签 统计

common-lisp ×1

lexical-scope ×1

lisp ×1