首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Common Lisp是否有类似java的Set Interface/implementing类?

Common Lisp是否有类似java的Set Interface/implementing类?
EN

Stack Overflow用户
提问于 2008-10-03 05:17:01
回答 8查看 3.8K关注 0票数 9

我需要像this这样的东西,一个不包含任何元素副本的元素集合。Common Lisp,特别是SBCL,有这样的东西吗?

EN

Stack Overflow用户

发布于 2008-10-26 23:27:35

就我个人而言,我只会实现一个函数,它接受一个列表并返回一个唯一的集合。我已经共同起草了一些对我有效的东西:

代码语言:javascript
复制
(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 HyperSpecCommon Lisp the Language (2nd Edition)的组合。

票数 0
EN
查看全部 8 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/165767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档