gpt4 book ai didi

common-lisp - DELETE 具有破坏性——但并非总是如此?

转载 作者:行者123 更新时间:2023-12-01 07:14:02 25 4
gpt4 key购买 nike

我对 Common Lisp 的破坏性 DELETE 函数有点困惑。它似乎按预期工作,除非该项目是列表中的第一项:

CL-USER> (defvar *test* (list 1 2 3))
*TEST*
CL-USER> (delete 1 *test*)
(2 3)
CL-USER> *test*
(1 2 3)
CL-USER> (delete 2 *test*)
(1 3)
CL-USER> *test*
(1 3)

最佳答案

请记住 DELETE应该在列表上工作,而不是在变量上工作。 DELETE被传递给列表(指向第一个缺点的指针)而不是变量。

由于delete无权访问变量 *test* ,它无法改变它。这里的“它”是指它的绑定(bind)。 *test*将指向与以前相同的缺点单元格。唯一可以更改的是 cons 单元格的内容或第一个 cons 单元格指向的其他 cons 单元格的内容。

有一件事是肯定的,无论如何DELETE确实,*test*将始终指向同一个 cons 单元格。

从中得出什么?如果你想拥有*test*指向删除操作的结果,那么你必须明确地这么说:

(setq *test* (delete 1 *test*))

关于common-lisp - DELETE 具有破坏性——但并非总是如此?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19339030/

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