gpt4 book ai didi

list - LISP 非常简单的列表题

转载 作者:太空宇宙 更新时间:2023-11-03 18:41:09 24 4
gpt4 key购买 nike

我正在学习 lisp,我对此很陌生,所以我想知道...

如果我这样做:

(defparameter *list-1* (list 1 2))
(defparameter *list-2* (list 2 3))
(defparameter *list-3* (append *list-1* *list-2*))

然后

(setf (first *list-2*) 1)
*list-3*

我会得到 (1 2 1 4)

我知道这是因为追加将“节省资源”并为第一个 block 创建一个新列表,但实际上只会指向第二个 block ,因为如果我这样做:

(setf (first *list-1*) 0)
*list-3*

我会得到 (1 2 1 4) 而不是更合乎逻辑的 (0 2 1 4)

所以我的问题是,在 lisp 中还有哪些其他情况是这样的,你们黑带 lispers 如何知道如何处理这种不直观或不一致的东西?

最佳答案

一种防御策略是避免共享结构。

(defparameter *list-3* (append *list-1* *list-2* '()))

(defparameter *list-3* (append *list-1* (copy-list *list-2*)))

现在新的*list-3*的结构是全新的,对*list-3*的修改不会影响*list- 2* 反之亦然。

关于list - LISP 非常简单的列表题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/426991/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com