Это не ошибка. '((a . 1) (b . 2))
является буквальной константой и, как и все константы, предполагается неизменной. Это означает, что все вхождения '(a . 1)
, которые также являются буквальными, могут просто указывать на car
другого, поскольку оно никогда не должно измениться
Теперь реализации могут создавать новые структуры, чтобы CLISP мог это делать, но вы не можете на это полагаться. Вы не должны видоизменять буквальные данные.
Если вы собираетесь изменить его, вам нужно использовать глубокую копию, например:
(defclass myclass ()
((s1
:initform (copy-tree '((a . 1) (b . 2))))
(s2
:initform (copy-tree '((a . 1) (b . 2))))))