He intentado comprender 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?¿Cuál es la diferencia entre Lisp-1 y Lisp-2?
Respuesta
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.
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.
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? –
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
@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
- 1. ¿Cuál es la diferencia entre {0} y ""?
- 2. Cuál es la diferencia entre = y: =
- 3. ¿Cuál es la diferencia entre .ToString (+) y ""
- 4. Cuál es la diferencia entre $ (...) y `...`
- 5. ¿cuál es la diferencia entre:.! y: r !?
- 6. ¿Cuál es la diferencia entre ".equals" y "=="?
- 7. ¿Cuál es la diferencia entre dict() y {}?
- 8. ¿Cuál es la diferencia entre `##` y `hashCode`?
- 9. ¿Cuál es la diferencia entre "$^N" y "$ +"?
- 10. ¿Cuál es la diferencia entre [indefinido] y [,]?
- 11. ¿Cuál es la diferencia entre + = y = +?
- 12. ¿Cuál es la diferencia entre " " y ""?
- 13. Cuál es la diferencia entre $ y jQuery
- 14. OpenGL (ES) - ¿Cuál es la diferencia entre frustum y orto?
- 15. Cuál es la diferencia entre la función() {}() y la función() {}()
- 16. ¿Cuál es la diferencia entre la abstracción y la encapsulación?
- 17. ¿Cuál es la diferencia entre @ y $ y% en MSBuild?
- 18. ¿Cuál es la diferencia entre la vinculación estática y dinámica?
- 19. ¿Cuál es la diferencia entre la sección .got y .got.plt?
- 20. ¿Cuál es la diferencia entre el colado y la coerción?
- 21. ¿cuál es la diferencia entre el complemento y la biblioteca?
- 22. ¿Cuál es la diferencia entre el casting y la conversión?
- 23. ¿Cuál es la diferencia entre WPF y la aplicación Silverlight?
- 24. ¿Cuál es la diferencia entre uno mismo y la ventana?
- 25. ¿Cuál es la diferencia entre CookieContainer y la colección Response.Cookies?
- 26. ¿Cuál es la diferencia entre la relación Composición y Asociación?
- 27. ¿cuál es la diferencia entre el material y la textura?
- 28. ¿Cuál es la diferencia entre el marco y la arquitectura?
- 29. ¿Cuál es la diferencia entre la carpeta vim72 y vimfiles?
- 30. ¿cuál es la diferencia entre la lex y yacc
¿No es un Lisp-2 más confuso tener funciones y variables con los mismos nombres? – Zubair
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
@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