Почему это происходит в sbcl? Может баг?
(defclass myclass ()
((s1
:initform '((a . 1) (b . 2)))
(s2
:initform '((a . 1) (b . 2)))))
(defparameter ins (make-instance 'myclass))
(setf (cdr (assoc 'a (slot-value ins 's1))) 43) ;; change only slot s1
;; here my problem
(slot-value ins 's1) ;; => ((a . 44) (b . 2)))
(slot-value ins 's2) ;; => ((a . 44) (b . 2)))
Но если изменить :initform на:
(defclass myclass ()
((s1
:initform '((a . 1) (b . 2)))
(s2
:initform '((a . 1) (b . 3)))))
Проблема исчезает
Я тестировал это в sbcl 1.4.3 и 1.4.11. В clisp вроде проблем не возникает.
(eq (slot-value ins 's1) (slot-value ins 's2))
и обратите внимание, что он возвращает. - person Barmar   schedule 30.08.2018