我如何使用Clojure的独特之处?集合上的功能?

时间:2009-11-08 22:23:12

标签: clojure

Clojure distinct?方法不采用集合,而是采用args列表

(distinct? x)
(distinct? x y)
(distinct? x y & more)

所以(distinct?0 0 0 0)正确返回 false ,而(distinct?[0 0 0 0])返回true 。如何在集合上使用 distinct?,以便传递集合[0 0 0 0]将返回false,因为集合包含重复项?

我确实意识到函数正常运行,但我正在寻找一种技巧来将它应用于集合的内容而不是args列表。

作为解决方法,我目前有

(defn coll-distinct? [coll]
   (= (distinct coll) coll))

但我觉得我错过了一种更优雅的方式重用截然不同的?

1 个答案:

答案 0 :(得分:17)

如果要将参数作为seq传递给函数,请使用apply

(apply distinct? [1 2 3 1])
; false
(apply distinct? [1 2 3])
; true