एक अंतर यह है कि conjकिसी संग्रह में सम्मिलित करने के लिए किसी भी तर्क को स्वीकार करता है, जबकि consसिर्फ एक लेता है:
(conj '(1 2 3) 4 5 6)
; => (6 5 4 1 2 3)
(cons 4 5 6 '(1 2 3))
; => IllegalArgumentException due to wrong arity
एक और अंतर रिटर्न मूल्य के वर्ग में है:
(class (conj '(1 2 3) 4))
; => clojure.lang.PersistentList
(class (cons 4 '(1 2 3))
; => clojure.lang.Cons
ध्यान दें कि ये वास्तव में विनिमेय नहीं हैं; विशेष रूप से, clojure.lang.Consको लागू नहीं करता है clojure.lang.Counted, तो एक countउस पर नहीं रह गया है एक निरंतर समय ऑपरेशन (इस मामले में यह शायद 1 + 3 को कम करेगा है - 1, पहला तत्व से अधिक रैखिक ट्रावर्सल से आता है 3 से आता (next (cons 4 '(1 2 3))जा रहा है एक PersistentListऔर इस प्रकार Counted)।
नामों के पीछे का इरादा है, मेरा मानना है, consइसका मतलब है कि विपक्ष (एक seq को चखना) 1 है , जबकि conjइसका मतलब संयोजन (एक संग्रह पर एक आइटम को इंगित करना ) है। seqद्वारा निर्माण किया जा रहा consतत्व अपनी पहली तर्क के रूप में पारित कर दिया साथ शुरू होता है और उसके के रूप में है next/ restभाग बात के आवेदन से उत्पन्न seqदूसरा तर्क करने के लिए; जैसा कि ऊपर दिखाया गया है, पूरी बात कक्षा की है clojure.lang.Cons। इसके विपरीत, conjहमेशा लगभग उसी प्रकार का एक संग्रह लौटाता है, जिस तरह का संग्रह उसके पास जाता है। (मोटे तौर पर, क्योंकि इसे 9 प्रविष्टियों से आगे बढ़ते ही PersistentArrayMapबदल दिया जाएगा PersistentHashMap।)
1 परंपरागत रूप से, लिस्प दुनिया में, consविपक्ष (एक जोड़ी को चखता है), इसलिए क्लूजुर लिस्प परंपरा से प्रस्थान करता है, जिसके consकार्य में एक सीक का निर्माण होता है, जिसमें पारंपरिक नहीं होता है cdr। consमाध्य का सामान्यीकृत उपयोग "प्रोग्रामिंग प्रकारों के अध्ययन और उनके कार्यान्वयन में वर्तमान में सर्वव्यापी" कुछ प्रकार या अन्य मूल्यों को एक साथ रखने के लिए एक रिकॉर्ड का निर्माण करता है; इसका मतलब तब होता है जब "सहमति से बचने" का उल्लेख किया जाता है।