【发布时间】:2011-11-07 23:18:18
【问题描述】:
当我尝试在方法中设置全局参数时,我遇到了一些奇怪的行为。
(defparameter *global-var-1* nil)
(defun method1 ()
(setf *global-var-1* '())
(format t "~a~%" *global-var-1*)
...
(loop
...
(setf *global-var-1* '(a))
(format t "~a~%" *global-var-1*)
(nconc *global-var-1* (list '(b c))))
在上面的代码中,当我调用method1时,第一个格式语句总是按预期打印nil。第二个格式语句在第一次调用 method1 时打印 (A),但第二次打印 (A (B C))。第三次(A (B C) (B C)) 以此类推。 setf 似乎没有将*global-var-1* 设置为(A),而是将其设置为以前的已知值。我究竟做错了什么?顺便说一句,我将*global-var-1 设置为(A),因为nconc 不适用于空列表。我稍后会在退出方法 1 之前删除 (A)。
【问题讨论】:
标签: lisp common-lisp