아래 코드는 로컬 변수로 z
을 가지고, 아직 글로벌 인 것처럼 동작합니다 : SBCL 나는 그것을 실행할 때 내가하지만 출력이Common Lisp의 속성 목록이 일부 전역 상태를 참조합니까?
(STUFF (1))
(STUFF (2))
(STUFF (3))
T
것으로 기대
(defun foo (m)
(let ((z '(stuff nil)))
(push m (getf z 'stuff))
(print z)))
(foo 1)
(foo 2)
(foo 3)
(STUFF (1))
(STUFF (2 1))
(STUFF (3 2 1))
T
왜 이런 경우입니까? 이 동작은 속성 목록 특유입니까?
[데이터의 예기치 않은 지속성] (의 사용 가능한 복제 http://stackoverflow.com/questions :
안전하게 수정할 수있는 문자의 복사본을 만들COPY-LIST
를 사용하여 원하는 동작을 얻으려면/18790192/unexpected-persistence-of-data) –