通常,通过父函数内调用的任何函数来使用父函数的实体是显而易见的。 如果我有,
(defun fun1(x)(let ((y nil))(fun2)))
(defun fun2 () (print y)))
然后(fun1 2)抱怨y。如何将父函数中的实体用于子函数,例如fun2能够访问f1范围内的实体。
答案 0 :(得分:3)
您的描述和代码确实是错误的,但我会根据您的理解回答您的想法。
要做到这一点,您需要将declare
变量设为special
:
(defun parent-fun (x)
(let ((y nil))
(declare (special y))
(child-fun x)))
(defun child-fun (x)
(declare (special y)) ;; Without this declatation it'll work
`(,x ,y)) ;; but you'll get a warning
CL-USER> (parent-fun '(a b c))
((A B C) NIL)