我对 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
传递的是列表(指向第一个 cons 的指针)而不是变量。
Since delete
无权访问该变量*test*
,它无法改变它。这里的“它”是指它的绑定。*test*
将指向与之前相同的 cons 单元格。唯一可以更改的是 cons 单元格的内容或第一个 cons 单元格指向的其他 cons 单元格的内容。
有一点是确定的,无论怎样DELETE
does, *test*
将始终指向同一个 cons 单元格。
由此得出什么结论呢?如果你想拥有*test*
指向删除操作的结果,那么你必须明确这样说:
(setq *test* (delete 1 *test*))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)