Ho cercato di capire la differenza tra Lisp-1 e Lisp-2 e come questo si riferisce a Clojure ma ancora non capisco bene. Qualcuno può illuminarmi?
Ho cercato di capire la differenza tra Lisp-1 e Lisp-2 e come questo si riferisce a Clojure ma ancora non capisco bene. Qualcuno può illuminarmi?
Risposte:
Secondo wikipedia :
Se uno spazio dei nomi separato per le funzioni sia un vantaggio è una fonte di contesa nella comunità Lisp. Di solito è indicato come il dibattito Lisp-1 vs Lisp-2. Lisp-1 si riferisce al modello di Scheme e Lisp-2 si riferisce al modello di Common Lisp.
Si tratta fondamentalmente di stabilire se variabili e funzioni possono avere lo stesso nome senza scontrarsi. Clojure è un Lisp-1, il che significa che non consente l'uso dello stesso nome per una funzione e una variabile contemporaneamente.
list
è spesso usato come parametro di funzione e nessuno fa niente, OMG che è così confuso poiché (list ...)
è una funzione standard. Molte funzioni che hanno list
come variabile non usano la list
funzione, o non la usano vicino a quella variabile. Anche quando ciò dovesse accadere non è troppo male: (list foo list)
. Questo non è più confuso di una frase come "combatti il buon combattimento" in cui la stessa parola appare come sostantivo e verbo.
Ti potrebbe piacere leggere questo articolo di Richard Gabriel. È un riepilogo delle questioni che la comunità Lisp stava discutendo in Lisp1 vs Lisp2. È un po 'denso e si muove lentamente nelle prime sezioni, ma è molto più facile da leggere quando si supera la sezione 5.
Fondamentalmente, Lisp1 ha un unico ambiente che mappa i simboli sui valori, e questi valori possono essere "regolari" o funzioni. Lisp2 ha (almeno) due spazi dei nomi (i simboli hanno uno slot per il loro valore di una funzione e uno per un valore normale). Quindi, in Lisp2, puoi avere una funzione chiamata foo e un valore chiamato foo, mentre in Lisp1, il nome foo può riferirsi solo a un singolo valore (funzione o altro).
Ci sono diversi compromessi e differenze di gusto tra i due, ma leggi il documento per i dettagli. Anche il libro di Christian Queinnec, "Lisp in Small Pieces" discute delle differenze intessute nel testo.
funcall
e function
. Questi scompaiono in un Lisp-1.