Я понимаю, как работает этот код:Dynamic Variable Закрытие в Common Lisp (SBCL)
(defvar *nums* '(2 3 5))
(defun print-nums()
(format t "~a~%" *nums*))
(print-nums)
-> (2 3 5)
-> NIL
Я даже понимаю, как новое значение динамически связанная переменная *nums*
передается print-nums
в этом коде:
(let ((*nums* '(1 2 3)))
(print-nums))
-> (1 2 3)
-> NIL
Но почему код ниже не работает одинаково?
(defvar *my-nums-f* (let ((*nums* '(1 2 3)))
#'(lambda() (format t "~a~%" *nums*))))
(funcall *my-nums-f*)
-> (2 3 5)
-> NIL
Является ли понятие замыкания неприменимым к динамически связанным переменным, или я делаю что-то неправильно? Если я ошибочно понял концепцию закрытия, может кто-нибудь, пожалуйста, объясните мне это?
Вы можете посмотреть [этот вопрос] (http://stackoverflow.com/questions/463463/dynamic-and-lexical-variables-in-common-lisp) (динамические и лексические переменные в Common Lisp) и относительные ответы, в частности [ответ Райнера Йосвига] (http://stackoverflow.com/a/2386051/2382734). – Renzo