2009-11-08 15 views
6

Clojure ayrı mı? yöntem bir koleksiyon değil, argsClojure’ı nasıl ayırt edebilirim? Bir koleksiyon üzerinde işlev?

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

listesini almaz Yani (farklı? 0 0 0 0) doğru yanlış döndürür iken (farklı? [0 0 0 0]), doğru döndürür. 'u nasıl farklı kullanabilirim? bir koleksiyon üzerinde bir koleksiyon [0 0 0 0] geçiren koleksiyon yinelenen içerdiğinden, bu nedenle yanlış döndürür?

Bu işlevin doğru şekilde gerçekleştirildiğini anlıyorum, ancak bunları bir yayın listesi yerine koleksiyonun içeriğine uygulamak için bir numara arıyorum. Geçici bir çözüm olarak

, Şu anda

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

var ama ayrı yeniden daha zarif bir şekilde eksik gibiyim?

+0

lol, bir hile içerikleri – gtrak

cevap

16

Bağımsız değişkenleri bir işlevin bir sırası olarak iletmek isterseniz, apply kullanın.

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

bunu 'uygulamak' nasıl olur koleksiyon boş durumda bu iş? –

+0

@KenLiu, 0-arity 'distinct?' Formunda değildir, yani '(farklı mı uygulanmalı? [])' Bir "ArgsException" ("Yanlış?)" Atar. Bunu 0-arity formuna sahip olan '+' ile karşılaştırın: '(+)' ve '(+ [] uygulayın)' her ikisi de '0' döndürün. – chbrown

İlgili konular