【发布时间】:2013-09-18 08:53:07
【问题描述】:
我有一个由七个整数组成的列表,最初都是 0,我们称之为“数据”。在运行我的程序的过程中,我想定期将这些整数之一的值加一。在程序结束时,我打印数据。一切都很好,除了在程序的每次连续运行中,上次运行的所有数据值都被添加到本次运行的所有数据值中。我只想要这次运行的数据值。无论数据是类方法中的局部变量、类方法调用的单独函数中的局部变量还是类的槽,都会发生这种意外行为。无论我通过 incf 还是 (setf value (1+ value)) 增加数据的各个值,都会发生这种情况。当我重新加载程序时,数据重置为全零,但是当我再次运行程序时,数据再次将上次运行的所有数据添加到这次运行的数据中。当我增加一个数据值时,我使用函数 nth ,其中 index 是另一个对象插槽的值。什么可能导致我的“数据”列表值的这种不受欢迎的持久性?
【问题讨论】:
-
请在这个问题中添加一些代码。我们需要看看数据是如何存储的,特别是为了回答这个问题。您提到“数据”列表,如果您在某处修改引用列表,我不会感到惊讶。
-
正如您所怀疑的,我使用的是引用列表。当我将其更改为函数 list 时,意外行为停止了。
标签: scheme lisp common-lisp literals