使用父函数中的实体

时间:2014-11-19 09:53:58

标签: lisp

通常,通过父函数内调用的任何函数来使用父函数的实体是显而易见的。 如果我有,

(defun fun1(x)(let ((y nil))(fun2)))

(defun fun2 () (print y)))

然后(fun1 2)抱怨y。如何将父函数中的实体用于子函数,例如fun2能够访问f1范围内的实体。

1 个答案:

答案 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)