linea di Rich su questo è stato il seguente
"Dal momento che stavamo parlando di sintassi , diamo un'occhiata al classico Lisp . Sembra essere la più semplice della sintassi, tutto è un elenco di simboli, numeri e alcune altre cose tra parentesi, potrebbe essere più semplice? In realtà, non è il più semplice, dal momento che a raggiungere quell'uniformità, ci deve essere un sostanziale sovraccarico di il significato delle liste. Possono essere chiamate di funzione, raggruppamenti di costrutti o letterali di dati, ecc. E determinare quale richiede utilizzando il contesto, aumentando il carico cognitivo quando si esegue la scansione del codice su valutarne il significato. Clojure aggiunge un paio di ulteriori dati letterali compositi agli elenchi e li utilizza per la sintassi. In tal modo, significa che gli elenchi sono quasi sempre elementi simili a una chiamata, mentre i vettori vengono utilizzati per il raggruppamento, e le mappe hanno i loro letterali. Si spostano da una struttura di dati per tre riduce il carico cognitivo sostanzialmente."
Una delle cose in cui crede è stato sovraccaricato nella sintassi standard è stato il tempo di accesso. Sintassi vettore Così in argomenti è legato al tempo di accesso costante quando Li ha usati:
Sembra strano anche se è valido solo per quel modulo ... non appena viene memorizzato in una variabile o passato in alcun modo l'informazione viene "persa". ..
(defn test [a]
(nth a 0)) ;;<- what is the access time of and element of a?
Personalmente preferisco s duro yntax cambia come parentesi da riservare a quando il programmatore deve cambiare i modelli mentali, ad es. per le lingue incorporate.
;; Example showing a possible syntax for an embedded prolog.
{size [],0}
{size([H|T],N) :- size(T,N1), N is N1+1}
(size '(1 2 3 4) 'n) ;; here we are back to lisp code
Tale concetto è sintatticamente costante. Non si esegue la "pass through" della struttura in fase di esecuzione. Prima del runtime (leggere/macro/tempo di compilazione) è un altro problema, anche se, dove possibile, è spesso meglio mantenere le cose come liste.
[edit]
La fonte originale sembra essere andato, ma qui è un altro record del colloquio: https://gist.github.com/rduplain/c474a80d173e6ae78980b91bc92f43d1#file-code-quarterly-rich-hickey-2011-md
La sintassi 'LET' non è una caratteristica specifica di Common Lisp. Fondamentalmente ogni Lisp (Emacs Lisp, ISLisp, Scheme, ...) supporta questa sintassi. Clojure no. –
Clojure 'let' si lega in sequenza. Quindi è equivalente a CL e Schema 'let *'. – Sylwester