我需要像this这样的东西,一个不包含任何元素副本的元素集合。Common Lisp,特别是SBCL,有这样的东西吗?
发布于 2008-10-26 23:27:35
就我个人而言,我只会实现一个函数,它接受一个列表并返回一个唯一的集合。我已经共同起草了一些对我有效的东西:
(defun make-set (list-in &optional (list-out '()))
(if (endp list-in)
(nreverse list-out)
(make-set
(cdr list-in)
(adjoin (car list-in) list-out :test 'equal))))基本上,当且仅当列表中不存在某一项时,adjoin函数才会以非破坏性方式将该项添加到列表中,并接受一个可选的测试函数( Common Lisp "equal“函数之一)。您也可以使用pushnew来破坏性地执行此操作,但我发现尾递归实现要优雅得多。所以,Lisp确实导出了几个允许您将列表作为集合使用的基本函数;不需要内置的数据类型,因为您可以使用不同的函数将内容预先添加到列表中。
我的所有数据源(不是函数,而是信息)都是Common Lisp HyperSpec和Common Lisp the Language (2nd Edition)的组合。
https://stackoverflow.com/questions/165767
复制相似问题