let、eval 和 quote 的行为

Behavior of let, eval, and quote

我试图了解 let 的行为。 为什么 case2 会报错?

;; case1: worked fine.
(let ((NF 5)) NF)
5

;; case2: got an error
(let ((NF 5)) (eval 'NF))
error: The variable NF is unbound

EVAL 无法访问词法变量。 CLHS 表示:

Evaluates form in the current dynamic environment and the null lexical environment.

如果您声明变量 special 它将起作用,因为它执行的是动态绑定而不是词法绑定。

(let ((NF 5))
  (declare (special NF))
  (eval 'NF))
5