3

标题是不言自明的。如何从另一个列表 Y(相同结构)构建一个新列表 X,但结果列表指向内存区域中的其他位置,实际上是另一个对象?我尝试使用make-list :initial-element Y或附加到一个空列表,但我仍然得到相同的对象。谢谢!

4

3 回答 3

12

通用 Lisp

使用COPY-LIST复制第一个列表级别。

使用COPY-TREE复制 conses 树,将在所有级别上复制多级列表。

COPY-TREE 和 COPY-LIST 都只会复制 conses 而不会复制其他内容。列表中的内容保持不变(意思是 EQL,而不是 EQ)。

有关这些和相关功能,请参阅 Common Lisp HyperSpec 的The Conses Dictionary

于 2009-11-14T15:52:08.040 回答
3

您可能想要使用 COPY-LIST。

于 2009-11-14T15:38:40.093 回答
0

我的副本列表(使用 sbcl)有效。

回复:

(defvar a '((1 2 3) (4 5 6)))

(defvar b (copy-tree a))

(setf (nth 0 (nth 0 b)) "4")

a

; ((1 2 3) (4 5 6)) is returned

b

;(("4" 2 3) (4 5 6)) is returned

也许如果你给我们更多的资源,我们可以提供帮助。

于 2009-11-14T17:24:30.397 回答