У меня есть класс Node, в котором есть слот 'element', который содержит список с числами и одной буквой, например:
'(1 2 3 b 4 5 6)
<code>
(defclass node ()
((element :reader get-element
:writer set-element
:initform '()
:initarg :element
:documentation "The element"))
Часть программы должна занять слот 'element', поменять букву одним из чисел и, наконец, создать новый объект Node с поменявшимся списком в качестве слота 'element'. У меня уже есть функция подкачки, которая получает список и двух членов этого списка, и с помощью функции rotatef они меняются местами.
Чтобы проверить, что функция подкачки работает, я создал следующий фрагмент кода, который сохраняет во временной переменной элемент и заменяет букву 'b' на число в списке:
<code>
(setf root (make-instance 'node))
(set-element '(1 2 3 b 4 5 6 7 8) root)</p>
<p>(setf temp (get-element root))
(swap temp 'b 4)
Проблема в том, что слот 'element' корневого объекта заменяется на временный. Странно, я пытался изменить функцию подкачки, чтобы изменить, и она не изменяет ни одну из двух.
Я не знаю, есть ли способ присвоения слота переменной или способ предотвращения вышеуказанного.
Спасибо.