Satu perbedaan adalah yang conjmenerima sejumlah argumen untuk dimasukkan ke dalam koleksi, sementara conshanya membutuhkan satu:
(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
Perbedaan lainnya adalah di kelas nilai yang dikembalikan:
(class (conj '(1 2 3) 4))
; => clojure.lang.PersistentList
(class (cons 4 '(1 2 3))
; => clojure.lang.Cons
Perhatikan bahwa ini tidak benar-benar dapat dipertukarkan; secara khusus, clojure.lang.Constidak diimplementasikan clojure.lang.Counted, jadi a counton itu bukan lagi operasi waktu konstan (dalam hal ini mungkin akan berkurang menjadi 1 + 3 - 1 berasal dari traversal linier atas elemen pertama, 3 berasal dari (next (cons 4 '(1 2 3))menjadi a PersistentListdan demikian Counted).
Maksud di balik nama-nama itu, saya percaya, itu consberarti kontra (truct a seq) 1 , sedangkan conjberarti menyambungkan (oin item ke koleksi). The seqsedang dibangun oleh consdimulai dengan elemen lulus sebagai argumen pertama dan memiliki sebagai yang next/ restbagian hal yang dihasilkan dari penerapan sequntuk argumen kedua; seperti yang ditunjukkan di atas, semuanya berkelas clojure.lang.Cons. Sebaliknya, conjselalu mengembalikan koleksi dengan jenis yang kira-kira sama dengan koleksi yang diteruskan kepadanya. (Secara kasar, karena a PersistentArrayMapakan diubah menjadi PersistentHashMapsegera setelah berkembang melampaui 9 entri.)
1 Secara tradisional, dalam dunia Lisp, conskontra (membelah sepasang), maka Clojure berangkat dari tradisi Lisp dalam menjalankan consfungsinya membangun sekuens yang tidak bersifat tradisional cdr. Penggunaan umum consuntuk mengartikan "membuat catatan dari beberapa jenis atau lainnya untuk menyimpan sejumlah nilai bersama" saat ini ada di mana-mana dalam studi bahasa pemrograman dan implementasinya; itulah yang dimaksud ketika "menghindari kontra" disebutkan.