Documentazione per conj
(da clojure.org):
conj [oin]. Restituisce una nuova collezione con xs 'added'. (conj nil item) restituisce (articolo). L''aggiunta' può succedere in "luoghi" diversi a seconda del tipo di calcestruzzo.
È più efficiente "aggiungere" elementi alla fine di un vettore, mentre è più efficiente farlo all'inizio delle liste. conj
utilizza quello che è il più efficiente per la struttura dati che gli viene assegnata.
Negli esempi si danno, '(1 2 3)
e (seq [1 2 3])
sia attuare ISeq
(vedi documentation for seq?
), mentre [1 2 3]
non lo fa.
Clojure conj
chiama in ultimo il metodo cons
(da non confondere con la funzione cons
- questo metodo è il codice del clojure interno) sulla struttura dati sottostante; per i vettori (PersistentVector
), cons
aggiunge elementi alla fine, mentre per le liste vengono aggiunte al fronte (il metodo cons
per PersistentList
s restituisce una nuova lista con il nuovo elemento come la sua testa, e la lista esistente come la coda) .
Ho studiato Clojure da maggio di quest'anno. Ho trovato approfondimento in esercizi come questo per essere molto utile, soprattutto perché non ho mai imparato un linguaggio simile al Lisp prima di Clojure. – octopusgrabbus