Hyperspec 中的以下声明是否符合逻辑? “如果 list-1 和 list-2 之间存在重复,则结果中只会出现重复实例之一。如果 list-1 或 list-2 中有重复条目,则冗余条目可能会也可能不会出现结果。”
在我读到这篇文章之前,我一直假设 union 应该返回一个唯一的列表,并对我的代码为什么没有这样做感到沮丧。删除列表之间但不在列表内的重复项似乎也很奇怪。为什么还要指定这个?
似乎人们应该能够假设 union 会产生一个唯一的集合元素列表,或者我是否遗漏了什么?
有关 Hyperspec 中的完整页面,请参阅 http://clhs.lisp.se/Body/f_unionc.htm
最佳答案
如果您的代码只包含唯一元素的集合(如 1 2 3
),则 UNION
将保留此属性。
如果您的代码包含具有非唯一元素的集合(如 1 2 2 3
),则 UNION
不需要做任何努力来强制结果的唯一性设置。
删除重复项是通过一个单独的函数完成的:REMOVE-DUPLICATES
。
关于common-lisp - 为什么 union 不返回唯一列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10819355/