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