普通LISP中Defun和Setf的意外行为

时间:2016-11-22 17:31:36

标签: common-lisp

以下代码给出了意外行为:

(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)。

发生了什么?

0 个答案:

没有答案