Имеется следующий код:
(defvar a nil)
(defvar b nil)
(setq a '((0 0 0)
(0 0 0)
(0 0 0)))
(setq b '((1 0 0)
(2 0 0)
(3 0 0)))
(defun out (x)
(dolist (i x)
(format t "~a~%" i))
(format t "~%"))
(out a)
(out b)
(setf (nth 1 (nth 1 a)) 1)
(setf (nth 1 (nth 1 b)) 1)
(out a)
(out b)
Выводит следующее:
(0 0 0)
(0 0 0)
(0 0 0)
(1 0 0)
(2 0 0)
(3 0 0)
(0 1 0)
(0 1 0)
(0 1 0)
(1 0 0)
(2 1 0)
(3 0 0)
Почему setf работает так странно? sbcl 1.0.6.40