0

我尝试从一组元素中删除元素,这些元素存在于 Clojure 中的不同序列中。但clojure.set/difference似乎并没有像我预期的那样工作。我的错误在哪里?

一些例子:

删除空序列

(difference #{3 2} '())

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

删除一些元素

(difference #{3 2} '(3))

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

移除集合中不存在的元素

(difference #{3 2} '(1))

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

删除所有元素

(difference #{3 2} '(2 3))

结果:(#{}如预期)

移除更多存在的元素

(difference #{3 2} '(1 2 3))

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

预期结果:#{}

clojure.set/difference因此,当结果是空集并且要删除的元素集具有比原始集更高的基数时,该函数似乎失败了。但问题是:为什么这不起作用?我希望这是clojure.set/difference.

4

1 回答 1

5

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

中的函数clojure.set只能使用设置参数调用。

于 2016-09-08T11:56:08.660 回答