我有一个 Node 类,它有一个“元素”插槽,其中包含一个带有数字和一个字母的列表,例如:
'(1 2 3 b 4 5 6)
(defclass node ()
((element :reader get-element
:writer set-element
:initform '()
:initarg :element
:documentation "The element"))
程序的一部分应该使用“元素”槽,用其中一个数字交换字母,最后创建一个新的 Node 对象,并将交换的列表作为它的“元素”槽。我已经有一个交换函数,它接收一个列表和该列表的两个成员,并使用 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)
问题是根对象的“元素”插槽与临时交换。奇怪的是,我尝试将交换功能更改为反转,它不会修改两者中的任何一个。
我不知道是否有任何方法可以将插槽分配给变量或防止上述情况发生的方法。
谢谢。