(Disclaimer - Sono consapevole del significato di SEQS in Clojure)cons comuni lisp contro crea una lista da due simboli, contro i clojure richiede un seq a cons on?
in Lisp comune la funzione di contro può essere usato per combinare due simboli in un elenco:
(def s 'x)
(def l 'y)
(cons s l)
In clojure - si può solo contro su una sequenza - i contro non sono stati estesi per funzionare con due simboli. Quindi si deve scrivere:
(def s 'x)
(def l 'y)
(cons s '(l))
C'è un modello di livello superiore in Clojure che spiega questa differenza tra LISP comune e Clojure?
Ho programmato un po 'in Clojure e non ero nemmeno a conoscenza di questo! Se ciò che affermi è corretto, questa è una buona domanda :) –
Nota che normalmente è meglio usare 'conj' di' cons'. Per maggiori dettagli, vedere la mia risposta a questa domanda (e il commento di cgrand): http://stackoverflow.com/questions/3008411/clojure-seq-cons-vs-list-conj (infatti, questa risposta spiega anche funzione di 'cons' in Clojure in contrasto con il tradizionale' Lisp 'cons' in una certa misura.) –
Il tuo primo esempio non è una lista, è una coppia. Una coppia (a.b) è diversa da una lista di due elementi (ab), che risulta essere la coppia (a. (B. Nil)) – Zorf