clojure lisp lisp-2

clojure - ¿Cuál es la diferencia entre Lisp-1 y Lisp-2?



(2)

Intenté entender la diferencia entre Lisp-1 y Lisp-2 y cómo esto se relaciona con Clojure, pero todavía no entiendo bien. ¿Alguien puede iluminarme?


De acuerdo con wikipedia :

Si un espacio de nombres separado para las funciones es una ventaja es una fuente de contención en la comunidad Lisp. Por lo general, se lo conoce como el debate Lisp-1 vs. Lisp-2. Lisp-1 se refiere al modelo de Scheme y Lisp-2 se refiere al modelo de Common Lisp.

Básicamente se trata de si las variables y las funciones pueden tener el mismo nombre sin chocar. Clojure es un Lisp-1 lo que significa que no permite que se use el mismo nombre para una función y una variable simultáneamente.


Le gustaría leer este paper de Richard Gabriel. Es un resumen de los problemas que la comunidad Lisp estaba discutiendo en Lisp1 vs Lisp2. Es un poco denso y de movimiento lento en las primeras secciones, pero es mucho más fácil de leer cuando pasas la sección 5.

Básicamente, Lisp1 tiene un único entorno que asigna símbolos a valores, y esos valores pueden ser "regulares" o funciones. Lisp2 tiene (al menos) dos espacios de nombres (los símbolos tienen una ranura para su valor de una función y uno para un valor regular). Entonces, en Lisp2, puede tener una función llamada foo y un valor llamado foo, mientras que en Lisp1, el nombre foo puede referirse solo a un único valor (función o no).

Hay varios intercambios y diferencias de gusto entre los dos, pero lea el documento para los detalles. El libro de Christian Queinnec, "Lisp in Small Pieces" también tiene una discusión sobre las diferencias tejidas a través del texto.