2011-01-02 18 views

Respuesta

46

Según wikipedia:

Ya sea un espacio de nombres separado para 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 is a Lisp-1 significa que no permite que se use el mismo nombre para una función y una variable simultáneamente.

+9

¿No es un Lisp-2 más confuso tener funciones y variables con los mismos nombres? – Zubair

+26

Parte de la razón es que los programadores que usan dialectos Lisp-2 no se desviven por tener funciones y variables con los mismos nombres. 'list' a menudo se usa como un parámetro de función y nadie lo hace, OMG es tan confuso ya que' (list ...) 'es una función estándar. Muchas funciones que tienen 'list' como variable no usan la función' list', o no la usan cerca de esa variable. Incluso cuando eso sucede no es tan malo: '(lista de foo)'. Esto no es más confuso que una oración como "pelea la buena batalla" donde la misma palabra aparece como sustantivo y verbo. – Kaz

+2

@Zubair Java tiene aún más espacios de nombres. Puede definir una clase, un método y una variable con el mismo nombre. – ceving

58

Quizás desee leer esto 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 pasa la sección 5.

Básicamente, Lisp1 tiene un único entorno que asigna símbolos a valores, y esos valores pueden ser ya sea "regular" 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.

+7

Una de las secciones más enigmáticas del documento de Gabriel es la sección 11 sobre Multiprocesamiento. En esa sección, él implica que Lisp1 es más propicio para un estilo funcional de programación, por lo tanto, más propicio para el multiprocesamiento. Obviamente, esto es de interés para Clojure. Pero no estoy realmente seguro * por qué * Lisp1 es más propicio para FP. Alguien tiene una idea de esto? –

+30

probablemente porque el punto principal de FP es tratar las funciones como valores de primera clase, por lo tanto, es mucho más conveniente y conceptualmente más limpio tratarlas de la misma manera que todos los demás valores – mikera

+9

@PeterMcLain Cuando los usuarios de dialectos Lisp-1 dicen que Lisp- 1 es más conductivo para la programación funcional, lo que quieren decir es que no tiene que rellenar el código lleno de operadores 'funcall' y' function'. Estos desaparecen en un Lisp-1. – Kaz

Cuestiones relacionadas