test.lisp
:
(defvar test
#'(lambda (var1)
#'(lambda (var2)
`((var1 . ,var1)
(var2 . ,var2)))))
(defvar var1 'wrong)
(defvar var2 'wrong)
在 REPL 中:
$ clisp -q -i test.lisp
;; Loading file test.lisp ...
;; Loaded file test.lisp
[1]> (funcall (funcall test 'right) 'right)
((VAR1 . WRONG) (VAR2 . RIGHT))
我认为现在 common lisp 应该是词法范围的,那么为什么var1
内部 lambda 没有捕获的值test
呢?我怎样才能确保它被捕获?