Common Lisp中的特殊声明和变量

时间:2018-01-09 17:43:46

标签: lisp common-lisp declaration ansi-common-lisp

我正在阅读Common Lisp Hyperspec,并且正在努力理解Special声明背后的概念。

即,什么是特殊变量以及为什么我们需要它们?我收集到了,通过使用特殊声明,我们可以在编辑器的眼中改变变量属于哪个范围,但细节没有我。

有人可以解释一下,也许会举一些例子吗?

1 个答案:

答案 0 :(得分:3)

特殊变量是动态绑定的。这意味着:

(defvar x 10)

(defun test (v) 
  (+ v x)) 

(let ((x 20))
  (test x)) 
; ==> 40

请注意,范围的词法规则不适用。而不是它表现得像第一个Lisp。如果全局变量不是特殊的,那么结果将是30。您可以通过意外声明变量特殊来引入难以发现的错误。为避免这种情况,我们使用*earmuffs*