2009-11-08 6 views
6

Clojure 別名?方法コレクションではなく、引数Clojureはどのように区別できますか?コレクションの関数ですか?

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

のリストを取ることはありませんので、(明確な?0 0 0 0)が正しくを返し、しばらく(明確な?[0 0 0 0] )がtrueを返します。 はどのように使用できますか?がコレクションにあるため、コレクションに重複が含まれているため、コレクション[0 0 0 0]を渡すとfalseが返されます。

私はこの関数が正しく機能していることを認識していますが、私はそれをargsのリストの代わりにコレクションの内容に適用するための手口を探しています。回避策として

、私は現在

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

を持っていますが、私は明確なを再利用し、よりエレガントな方法が欠けてるような気が?

+0

笑、それは内容にそれを '適用する'のだまし – gtrak

答えて

16

引数をseqとして関数に渡す場合は、applyを使用します。

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

コレクションが空の場合、これはどのように機能しますか? –

+0

@KenLiu 0-arityの 'distinct? '形式はないので、'(distinct?[])を適用すると '(distinct?)と同じ"間違った数のargs(0) "ArityExceptionがスローされます。これを '+'と比較すると、 '(+)'と '(apply + [])'は両方とも '0'を返します。 – chbrown

関連する問題