以下代码给出了意外行为:
(defun my-make-list () '(5 5 5))
(setf my-list (my-make-list))
(setf (car my-list) 3)
(my-make-list)
====> (3 5 5)
我将my-make-list设置为一个始终返回列表的函数(5 5 5)。 然而,当我使用setf将函数的输出分配给my-list时;然后使用setf更改my-list中的一个项目,似乎函数的定义发生了变化。它现在是一个总是返回列表的函数(3 5 5)。
发生了什么?