2
當我嘗試在方法中設置全局參數時,出現了一些奇怪的行爲。設置全局變量恢復爲上一個值
(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))))
在上面的代碼,當我打電話方法1,第一格式語句始終打印nil
預期。第二次格式聲明在第一次調用方法1時打印(A)
,但第二次打印(A (B C))
。第三次(A (B C) (B C))
等。而不是將*global-var-1*
設置爲(A)
,setf似乎將其設置爲先前已知的值。我究竟做錯了什麼?順便說一下,我設置*global-var-1
爲(A)
,因爲nconc
將無法使用空列表。稍後在退出方法1之前刪除(A)
。
謝謝。我正在使用** append **,我想讓代碼更快一些,因此** nconc **。還是新的lisp,我一直忘記,看起來像c或java中的文字是Lisp中的符號,並帶有這樣的後果。 – WanderingPhd