2009-11-08 9 views
6

क्लोजर विशिष्ट? विधि एक संग्रह है, बल्कि आर्गमैं क्लोजर के विशिष्ट का उपयोग कैसे कर सकता हूं? एक संग्रह पर काम?

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

की एक सूची नहीं ले करता है तो (अलग? 0 0 0 0) सही ढंग से रिटर्न झूठी, जबकि (अलग? [0 0 0 0]) सच देता है। मैं का उपयोग कैसे कर सकता हूं? संग्रह पर ताकि संग्रह को पास किया जा सके [0 0 0] संग्रह में डुप्लिकेट होने के बाद झूठी वापसी होगी?

मुझे एहसास है कि फ़ंक्शन सही तरीके से प्रदर्शन कर रहा है, लेकिन मैं तर्कों की बजाय संग्रह की सामग्री पर इसे लागू करने के लिए एक चाल की तलाश में हूं।

समाधान के लिए, मैं वर्तमान में

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

है, लेकिन मुझे लगता है कि मैं एक और अधिक सुरुचिपूर्ण रास्ता अलग पुन: उपयोग याद कर रहा हूँ?

+0

lol, एक चाल सामग्री – gtrak

उत्तर

16

यदि आप फ़ंक्शन में एक सेक के रूप में तर्क पारित करना चाहते हैं, तो apply का उपयोग करें।

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

करने के लिए 'लागू' के लिए यह कैसे इस मामले में जहां संग्रह खाली है में यह काम होगा? –

+0

@ केनिलियू कोई 0-धर्मार्थ 'विशिष्ट' प्रकार नहीं है, इसलिए '(अलग लागू करें? []) 'जोर देता है" तर्कों की गलत संख्या (0) "ArityException,' (विशिष्ट?)' के समान। इसकी तुलना '+' के साथ करें, जिसमें 0-एआरटी फॉर्म है: '(+)' और '(लागू + []) 'दोनों वापसी' 0'। – chbrown

संबंधित मुद्दे

 संबंधित मुद्दे