当结果为空且右集具有更高的基数时,clojure.set/difference会失败

Mat*_*mer 0 set-theory clojure set

我尝试从一组中释放元素,这些元素存在于Clojure中的不同序列中.但clojure.set/difference似乎没有像我期望的那样起作用.我的错误在哪里?

一些例子:

删除空序列

(difference #{3 2} '())
Run Code Online (Sandbox Code Playgroud)

结果:( #{3 2}如预期的那样)

删除一些元素

(difference #{3 2} '(3))
Run Code Online (Sandbox Code Playgroud)

结果:( #{2}如预期的那样)

删除集合中不存在的元素

(difference #{3 2} '(1))
Run Code Online (Sandbox Code Playgroud)

结果:( #{3 2}如预期的那样)

删除所有元素

(difference #{3 2} '(2 3))
Run Code Online (Sandbox Code Playgroud)

结果:( #{}如预期的那样)

删除更多存在的元素

(difference #{3 2} '(1 2 3))
Run Code Online (Sandbox Code Playgroud)

而不是结果我得到IllegalArgumentException包含?类型不支持:clojure.lang.PersistentList clojure.lang.RT.contains(RT.java:814)

预期结果: #{}

所以看起来,clojure.set/difference当结果是空集并且要删除的元素集具有比原始集更高的基数时,函数失败.但问题是:为什么这不起作用?我希望这是一个合法的应用程序clojure.set/difference.

Lee*_*Lee 5

这不起作用,因为差异函数比较两个输入的大小并迭代较小的集合并从第一个集合中删除元素.如果第二个参数较大,则用于contains?查看第一个集合中的项是否存在于第二个参数中.contains?列表不支持,因此您将获得异常.

在该功能clojure.set只能与一组参数调用.