数字と1文字のリストを含む'element'スロットを持つNodeクラスがあります。次に例を示します。
'(1 2 3 b 4 5 6)
(defclass node ()
((element :reader get-element
:writer set-element
:initform '()
:initarg :element
:documentation "The element"))
プログラムの一部は、「要素」スロットを取得し、文字を数字の1つと交換し、最後に、交換されたリストを「要素」スロットとして使用して新しいノードオブジェクトを作成することになっています。私はすでにリストとそのリストの2つのメンバーを受け取るスワップ関数を持っており、rotatef関数を使用してそれらをスワップします。
スワップ関数が機能していることをテストするために、一時変数に要素を格納し、文字「b」をリスト内の数値と交換する次のコードを作成しました。
(setf root (make-instance 'node))
(set-element '(1 2 3 b 4 5 6 7 8) root)
(setf temp (get-element root))
(swap temp 'b 4)
問題は、ルートオブジェクトの「element」スロットがtempとともに交換されることです。不思議なことに、スワップ関数をリバースに変更しようとしましたが、2つは変更されません。
変数にスロットを割り当てる方法や、上記の発生を防ぐ方法があるかどうかはわかりません。
ありがとう。