如何解决删除公共lisp中列表的所有元素的函数?
如何创建一个删除给定列表中所有元素的函数?
是否有一个函数已经这样做了,还是我应该创建它? 我想用递归删除第一个元素,直到列表为空
我不仅需要被显示而且需要被删除,例如当我有一个名为 list1 的列表定义为 ((a 2) (b 3) (c 4)) 时,我需要一个删除它的函数,所以我可以稍后用其他元素填充它。
解决方法
这听起来很混乱:Lisp 不像 C 那样你必须手动管理存储。如果不是这里有一些可能性。
如果您想“删除”所有元素,那么这样做没有任何意义:只需停止引用列表,它们就消失了。如果列表绑定到某个变量,那么如果没有其他引用它,当变量超出范围时它就消失了。或者只是 (setf var-bound-to-list nil)
例如(但如果变量无论如何都将超出范围,请不要这样做)。
如果您想删除一些元素,那么您可能需要remove
or delete
函数之一:
-
(remove elt sequence)
将非破坏性地从elt
中移除sequence
:它将返回一个新序列,其中elt
已被移除。 -
(delete elt sequence)
与remove
类似,只是它具有破坏性:它(几乎总是)破坏性地修改sequence
。
请注意,在列表的情况下,有一种情况 delete
不是破坏性的:如果 elt
是列表的第一个元素(如果您考虑列表的工作原理,原因是应该很明显)。所以你通常想要做 (setf myvar (delete 'foo myvar))
来处理这种情况。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。