標題不言自明。我如何從另一個列表Y(相同的結構)創建一個新的列表X,但結果列表指向內存區域的其他地方,實際上是另一個對象?我試着用make-list :initial-element Y
或附加到一個空的列表,但我仍然得到相同的對象。謝謝!如何製作新的列表以指向其他地方,Lisp
3
A
回答
3
你可能想要使用COPY-LIST。
12
Common Lisp的
使用COPY-LIST複製第一列表級別。
使用COPY-TREE要複製一個conses樹,多級列表將被複制到所有級別。
COPY-TREE和COPY-LIST都只會複製conses而沒有別的。列表中的內容保持不變(意味着EQL,而不是EQ)。
有關這些功能和相關功能,請參閱Common Lisp HyperSpec的The Conses Dictionary。
0
我的副本列表(使用sbcl)工作。
REPL:
(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
也許如果你給了我們更多的來源,我們可以提供幫助。
相關問題
- 1. 如何製作由其他列表組成的列表?
- 2. 如何創建其中一列的表指向其他表的關鍵點?
- 3. 反向LISP列表
- 4. Lisp更新列表
- 5. 如何使用範圍製作其他值的列表?
- 6. 從dplyr和rowwise的其他向量列中的新列表
- 7. 如何製作包含來自其他列表的特定值的列表?
- 8. SQL服務器:指向其他表
- 9. PHP Parse.com使用指向其他表的列檢索數據
- 10. 對其他地方的控制
- 11. 根據其他列的條件製作熊貓的新列
- 12. SQL:如何在多列指向相同的其他表時進行連接?
- 13. 更新列與其他表中的列?
- 14. 如何查詢設置爲指向其他表的指針的值
- 15. 如何製作頂部行中的列數多於其他列的表格?
- 16. 爲什麼我可以給引用指定一個新值,以及如何使引用指向其他內容?
- 17. 如何從Angular.js中的其他指令控制器更新指令$ scope?
- 18. 從表中選擇,如果其他表指向記錄
- 19. 如何使可在其他地方PHP
- 20. 如何製作「其他 - 請指定?」單選按鈕
- 21. 如何製作調用其他類的方法的java程序?
- 22. 如何根據1個其他列製作多個列
- 23. 以其他形式更新控制
- 24. 如何指定-march =本地使用編譯指示(或其他方式)在GCC
- 25. 其他職位的更新列表
- 26. 如何從其他表中獲取列,以形成一個新表?
- 27. 如何在其他地方繪製隱形JFrame?
- 28. 如何分隔列數據以從一個表複製到其他表?
- 29. 如何從一個表中查找值以限制其他表?
- 30. 如何製作新元素列表?
是的,就是這樣。如果我在新列表中設置了一個位置,第一個將不會被更改。謝謝。 – PCManticore 2009-11-14 15:40:48
事實上,如果我使用列表中的列表,問題仍然存在。例如,給定a((1 2 3)(4 5 6))和b作爲a的副本,則setf(nth 0(nth 0 b))「4」將更改這兩個列表。 – PCManticore 2009-11-14 15:44:47
注意最有利的評論,和/或閱讀HyperSpec。 COPY-LIST只複製一個* list * - 它爲頂層創建新的conses,然後只指向舊數據(如果舊數據是指針,就像另一個cons,將在兩個列表之間共享) 。 COPY-TREE將通過您的結構遞歸併在各個層次上創建新的concon,但其他類型的複雜數據結構仍可能被共享。要做到這一點*完全*你必須編寫自己的函數,因爲沒有像通用複製函數那樣的東西。 – Xanthir 2009-11-19 15:40:38