Sé que son dialectos de la misma familia de lenguajes llamados lisp, pero ¿cuáles son exactamente las diferencias? ¿Podría dar una descripción general, si es posible, que cubra temas como sintaxis, características, funciones y recursos?
Sé que son dialectos de la misma familia de lenguajes llamados lisp, pero ¿cuáles son exactamente las diferencias? ¿Podría dar una descripción general, si es posible, que cubra temas como sintaxis, características, funciones y recursos?
Respuestas:
Todos tienen mucho en común:
(function-name arg1 arg2)
Características distintivas de Common Lisp:
Características distintivas de Clojure:
[]
y mapas se {}
utilizan como estándar además de las listas estándar ()
; además de la utilidad general de los vectores y mapas, algunos creen que se trata de una innovación que hace que en general sea más legibleCaracterísticas distintivas del esquema:
La gente de arriba se perdió algunas cosas
Common Lisp también tiene vectores y tablas hash. La diferencia es que Common Lisp usa # () para vectores y no usa sintaxis para tablas hash. El esquema tiene vectores, creo
Common Lisp tiene macros de lector, que le permiten usar nuevos corchetes (al igual que Racket, un descendiente de Scheme).
Scheme y Clojure tienen macros higiénicas, a diferencia de las antihigiénicas de Common Lisp
Todos los idiomas son modernos o tienen proyectos de renovación extensos. Common Lisp ha obtenido bibliotecas extensas en los últimos cinco años (gracias principalmente a Quicklisp), Scheme tiene algunas implementaciones modernas (Racket, Chicken, Chez Scheme, etc.) y Clojure se creó hace relativamente poco tiempo.
Common Lisp tiene un sistema OO incorporado, aunque es bastante diferente de otros sistemas OO que podría haber utilizado. En particular, no se aplica, no tiene que escribir código OO.
Los lenguajes tienen filosofías de diseño algo diferentes. Scheme fue diseñado como un dialecto mínimo para entender el modelo de actor; más tarde se utilizó para la pedagogía. Common Lisp fue diseñado para unificar la miríada de dialectos Lisp que habían surgido. Clojure fue diseñado para la concurrencia. Como resultado, Scheme tiene la reputación de ser minimalista y elegante, Common Lisp de ser poderoso e independiente del paradigma (funcional, OO, lo que sea), y Clojure de favorecer la programación funcional.
No se olvide de las diferencias entre Lisp-1 y Lisp-2.
Scheme y Clojure son Lisp-1:
eso significa que tanto los nombres de variables como de funciones residen en el mismo espacio de nombres.
Common Lisp es Lisp-2: la
función y las variables tienen diferentes espacios de nombres (de hecho, CL tiene muchos espacios de nombres).
Gimp está escrito en Scheme :)
De hecho, una gran cantidad de software que algunos creen que podría estar escrito en C ++ probablemente se hizo bajo el paraguas de Lisp, es difícil distinguir las manzanas doradas del grupo. El hecho es que C ++ no siempre fue popular, solo parece serlo hoy debido a un historial de actualizaciones. Durante la mitad menor del siglo, C ++ ni siquiera utilizó subprocesos múltiples, fue donde Python es hoy un pozo negro de código de pegamento defectuoso inútil no probado. Avanzar un poco más rápido y ahora estamos viendo un aumento en la programación funcional, es más como adaptarse o morir. Creo que Java lo tiene bien en lo que respecta a la parte de adaptación.
Scheme fue diseñado para simplificar el lenguaje Lisp, esa era su única intención, excepto que nunca tuvo éxito. Creo que Clojure hace algo similar, está destinado a simplificar Scheme para la JVM nada más. Es como cualquier otro lenguaje JVM que está ahí para inflar la experiencia del usuario, solo para simplificar la escritura repetitiva en la tierra de Java.