la funzione mappa non esegue effettivamente la funzione mappata su ciascun memeber della raccolta. piuttosto restituisce una cella "pigro-cons". questo assomiglia molto al tuo classico elenco linkato singolarmente con una differenza molto importante, i dati in ogni cella sono calcolati nel momento in cui viene letto non nel momento in cui è definito (questo risultato è ovviamente memorizzato per le letture successive). Quindi, per far funzionare la funzione, è necessario leggere il risultato dell'esecuzione della funzione. Perché in questo caso non vi preoccupate circa il risultato della funzione unica che ha funzionato clojure fornisce una grande funzione wrapper chiamato
(dorun .... insert your map here ....)
che creerà la mappa, leggere i risultati e prontamente li buttare fuori con fuori sprecare la memoria memorizzare loro per dopo.
Se si esegue il mapping di una funzione con i risultati che si desidera conservare, utilizzare invece doseq.
fonte
2009-07-23 18:20:10
Grazie per la risposta dettagliata. Tutte le astrazioni sono pigri? Come faccio a sapere quali sono e quali no? – unj2
credo che siano tutti tranne l'inverso, sebbene i vettori abbiano una funzione (rsec [1 2 3]) che crea un secondo che inizia alla fine e che di solito risolve il problema. –