common-lisp - 为什么 union 不返回唯一列表?

标签 common-lisp

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/

相关文章:

lisp - 使用 macroexpand-1 扩展 let 形式内的宏(Practical Common Lisp,第 8 章, "Plugging the Leaks")

iteration - Lisp,向后迭代

loops - 使用 common lisp 'loop' 宏对向量求和

lisp - 函数返回列表但在 LISP 中打印出 NIL

common-lisp - 为 eval 设置环境(包?)

version-control - 我该如何将 Lisp 代码拆分成多个源文件?

common-lisp - 有内置类的图吗?

namespaces - Common Lisp 是 Lisp-n 吗?

function - Lisp &rest 参数和递归调用

lisp - 如何从 Lisp 类导出槽和访问器?