lisp clojure scheme

¿Qué Lisp debería aprender?



clojure scheme (17)

Aprende elisp para que puedas extender Emacs.

¿Qué Lisp (dialecto) debería aprender, y por qué?

La fragmentación entre CL y Scheme disminuye la aceptación (¡al menos para mí!).

Entonces, dame la "respuesta verdadera", por favor!

Intenté leer las comparaciones de características, y parecen empantanarse en esoterismo (que no entiendo del todo) como si el dialecto es completamente recursivo de cola, y cosas por el estilo. Espero que todos (colectivamente) puedan aclarar las diferencias opacas.

Cosas que me gustan

Buena compatibilidad con bibliotecas, buenos entornos y soporte Unicode.

Cosas que no me gustan

Flamewars. Características que son útiles al principio, pero que interfieren con el aprendizaje a largo plazo.

Actualizaciones

  1. He estado usando principalmente MzScheme, lo cual estoy disfrutando muy bien, una vez que tengo soporte para readline. No ejecuto una GUI en Unix, por lo que parece ser una buena opción de entorno para mí.

  2. También estoy muy contento de que Clojure tenga un paquete .deb fácil de instalar en Debian, por lo que es mucho más fácil jugar con él. Esta es una gran victoria. A pesar de la hostilidad de algunos más bien fáciles de enojar a continuación, la baja barrera de entrada es una victoria. Me gusta ser cuchareado.

  3. Después de leer mucho más de SICP , entiendo mucho mejor los problemas relacionados con la repetición de cola.


Conjetura: al aprender tu primer ceceo, no aprendas uno que terminarás usando para el desarrollo final.

Lema: aprende Arc. Son todas las cosas "difíciles de asimilar" en ceceo: cierres, macros, continuaciones, sin la complejidad de la interoperabilidad Java de Clojure, la confusión del espacio de nombres de CL o la fragmentación del nombre de Scheme. Si eres dedicado, puedes aprender todas estas cosas en un fin de semana. Si eres agudo y dedicado, en una noche.

Y hará que aprender todo lo demás sea mucho más fácil.


Contra Chuck, una ventaja de Common Lisp es que tiene un estándar al que las implementaciones se adhieren y se esfuerzan, de modo que puede desarrollarse ampliamente con SBCL (que tiene una excelente verificación e inferencia de tipos) y luego, por ejemplo, implementar como un ejecutable vinculado con C bibliotecas (con ECL u otros) o como .jar haciendo uso de bibliotecas Java (con ABCL), o con una Mac o una GUI nativa de Windows (Clozure, ambas). Common Lisp es increíblemente portable en arquitecturas y sobre implementaciones y en el tiempo, y Common Lispers hace esfuerzos para mantener las cosas de esta manera, con el apoyo del lenguaje. Como ilustración, una absurda divergencia de comportamiento no estandarizado es la pregunta "¿es esta una variable especial?" Así que lo respondí a través de las implementaciones que uso:

#-abcl (defun special-variable-p (symbol) #+ecl(si:specialp symbol) #+ccl(proclaimed-special-p symbol) #+sbcl(equal ''(:special t) (multiple-value-list-int:info :variable :kind symbol)))

que reduce, en tiempo de lectura, a nada en ABCL (tiene esto ya), a (defun special-variable-p (symbol) (si:specialp symbol)) en ECL, y así sucesivamente. Así que puedo poner esto en mis archivos .rc y usar la función común en REPL. Pero esto no es muy importante: no se trata de una red de threading o una red de respaldo diverso o una biblioteca de Procesos secuenciales de comunicación . Este último ejemplo solo tiene un #+sbcl/#-sbcl incluso cuando se ejecuta en cinco implementaciones. Porque se basa en un código que ha sido cuidadosamente portado.

Pero lo que permite esta (y otras) ventajas también plantea su propio desafío para el alumno: Common Lisp es un lenguaje muy grande. No es algo que puedas absorber en una semana o dos, como lo hice con Clojure (pero mi Clojure ya está decayendo con los cambios de última hora listos para implementarse; ese lenguaje, aunque pesado por sus propios méritos, me recordó, por contraste, Mucho de lo que me gusta de Common Lisp.) Así que deberías leer una gran cantidad de esta página y mantener HyperSpec presionado (para mí, Mx hyperspec RET do-symbols RET es suficiente cercanía a la Biblia), y pensar acerca de comprar algunos libros. Tengo Practical Common Lisp , acabo de recibir Let Over Lambda , y compraré PAIP muy pronto.

Pero incluso si Common Lisp es la verdadera respuesta , no perderás completamente tu tiempo al elegir una alternativa engañosamente llamativa ("engañosa" porque CL común no te muestra todo lo que sus macros pueden hacer, y tiene más tipos de macros que nadie. La comparación habitual es entre CL malo y alternativa X optimizada por sintaxis). Seguirás aprendiendo los conceptos básicos, aún puedes usar mucho de lo que puedes leer en SICP, On Lisp, The Little Schemer , etc. Un ceceo, incluso el ceceo incorrecto, es aún mejor que un no ceceo. (Pero pasarás parte de tu tiempo implementando partes del ceceo correcto, mal, con un ceceo incorrecto. Meta-Greenspun).


Creo que o quieres Common Lisp o PLT Scheme.

El primero tiene mucha libertad y poder (que al principio podría abrumarlo) y este último viene con un conjunto de bibliotecas, tutoriales coincidentes y un IDE bien integrado.



El mayor problema de Lisp es que no existe un estándar predominante al que todos se apeguen. No solo tiene que elegir entre Common Lisp y Scheme; debe elegir entre varias implementaciones incompatibles de Common Lisp y varias implementaciones incompatibles de Scheme, así como otras pequeñas cosas como Arc y Clojure.

Yo recomendaría comenzar con MzScheme . Es popular, está activamente desarrollado, tiene muchas bibliotecas que ofrecen las características de un entorno de programación moderno, y Scheme es algo más simple (por no decir mejor, simplemente más simple) que Common Lisp.


Elige cualquier cosa menos Clojure, acéptala, y estarás en una mejor posición para evaluarla más tarde.

Formuló esta pregunta en la que Lisp es el mejor medio para aprender Lisp, y para mí tiene que incluir un Lisp que se construye a partir de primitivas de bajo nivel, mientras que partes grandes de Clojure están escritas en Java.

Si ha formulado esta pregunta como cuál es el mejor Lisp para comenzar un nuevo proyecto, entonces Clojure puede ser la mejor opción.


Hay muy pocas opciones reales allí, ya sea SBCL, Clojure o PLTScheme.


No sé Lisp pero aquí está por qué creo que PLT Scheme es una buena opción:

  1. Documentaciones realmente buenas
    http://download.plt-scheme.org/doc/html/

  2. DrScheme
    DrScheme es un increíble entorno de programación que viene con compilador, stepper, correctores de sintaxis, REPL, una gran variedad de idiomas y es extensible. Esto hace que toda la experiencia sea divertida. Ver algunas screenshots

  3. Buen apoyo de la comunidad.
    La comunidad está muy entusiasmada con su idioma y también es muy solidaria. Si tiene alguna pregunta, hay listas de correo, grupos y foros disponibles. Incluso los autores son muy accesibles.

  4. Investigación continua
    PLT es muy activo y continúa mejorando su herramienta. Puede esperar muchas innovaciones de los laboratorios. p.ej. Estoy muy entusiasmado con el uso de esto: http://blog.plt-scheme.org/2009/05/typed-scheme-20.html

  5. Libros gratis y tutoriales interesantes para que comiences.
    http://www.htdp.org/
    http://world.cs.brown.edu/

  6. Buenos módulos y extensas bibliotecas.
    http://www.cs.utah.edu/plt/develop/
    http://planet.plt-scheme.org/ también vea docs

Si está aprendiendo Scheme, DrScheme .


Para mí, la teoría fundamental de Scheme es mucho más convincente. PLTScheme es, de lejos, el LISP más desarrollado que he encontrado. Desafortunadamente, tiene una proliferación de tipeo que oscurece la belleza de Lisp.

Me encantaría ver algo como el arco tener éxito, pero parece poco probable.


Si quieres evitar flamewars y disfrutas de las bibliotecas ve a Clojure. Es pequeño, rápido, y la comunidad es útil y no dogmática. Es Lisp, menos el absurdo fragmento de la década de 1980. Tiene un BDFL y si tiene una buena idea, hay una gran posibilidad de que se implemente en el idioma.

He jugado con Common Lisp, es algo hermoso. He completado los primeros 3 capítulos y el Evaluador Metacircular en SICP en DrScheme, y eso también es hermoso. Por supuesto, te beneficiarás enormemente de aprender esto.

Pero, con el tiempo, llegué a tener pequeños idiomas queridos para mi corazón. No mentiré, amo Javascript y amo C (y maldición si cada idioma no tiene un núcleo C en su corazón) porque son pequeños.

Clojure es pequeño. Es elegante Es un lenguaje para nuestros tiempos.


Solo elija uno, y apréndalo. Cuando descubras las diferencias, estarás en condiciones de elegir nuevamente, si elegiste mal la primera vez.


Soy un fanático de Scheme, pero han pasado más de 10 años desde que hice algo con Scheme.

como otros han dicho, simplemente elija uno y listo.


Ve con Clojure. Es un lenguaje sorprendente con acceso completo a cualquier biblioteca de Java. Ha estado en desarrollo por poco más de 2 años y ya tiene 3 complementos IDE en desarrollo y un libro que se publicará en abril al respecto. Es muy rápido, muy elegante y hermoso. No puedes equivocarte con Clojure.


Ya sabes ... Cuando me interesé por Lisp, también pensé que tendría que elegir. Luego, después de leer y preguntar mucho, terminé eligiendo Common Lisp. No porque sea "mejor" que Scheme de una manera absoluta, sino porque tenía características que sabía que probablemente usaría en los próximos 2-3 años en mis proyectos:

  • Un compilador muy eficiente para computación numérica (SBCL),
  • El sistema de condición, y ...
  • Debo admitir que SLIME también jugó un papel importante en esta decisión. :-)

Entonces, si fuera usted, comenzaría a aprender un poquito de cada idioma, y ​​descubriría cuáles son las fortalezas y debilidades relativas de cada uno (es decir, aquellas relacionadas con lo que necesitará / querrá hacer más a menudo) de modo que usted podría elegir uno. Puede que descubras que también aprenderás el otro más tarde (me pasó a mí, tuve que aprender más Scheme después de un año estudiando Common Lisp)

En cuanto a Arc, Clojure y Lush, y no los conozco. Supongo que el mismo argumento podría aplicarse a ellos también ... Las razones por las que no quise invertir demasiado en ellas fueron: Arc no parece ser interesante para la computación numérica, y P. Graham parece obsesionado por el tamaño del código (para el punto de hacer su código ilegible); Clojure parece agradable, pero no me gusta la JVM. Y exuberante ... Bueno, además de usar el alcance dinámico, las versiones compiladas e interpretadas del lenguaje son muy diferentes, y no se pueden compilar funciones recursivas. Entonces, era Scheme o Common Lisp para mí.


Clojure es un gran dialecto de LISP que promueve la programación funcional. Se ejecuta en JVM por lo que tiene acceso a cualquier biblioteca de Java que pueda estar acostumbrado a usar. El sitio tiene una gran documentación y screencasts de screencasts para ayudarlo a aprender. Otra ventaja es que es muy fácil de instalar, a diferencia de muchos otros dialectos.

Si solo busca asimilar los conceptos, Emacs (específicamente EmacsLISP) es otra alternativa. Viene con una increíble documentación, tutoriales y muchas muestras de código. Los screencasts son bastante fáciles de encontrar también. Uno de los grandes beneficios de Emacs es que el editor está escrito en LISP, por lo que el editor tiene naturalmente un buen soporte para ejecutar, editar y depurar LISP. Además, puede ampliar el editor para que las necesidades de edición de textos sean más fáciles cada día mientras aprende LISP.


Clojure es un dialecto moderno desarrollado activamente de Lisp. Se basa en la JVM, por lo que todas las bibliotecas de Java están disponibles de inmediato y, por lo tanto, también tiene compatibilidad con Unicode.

Esta es una alternativa, no la Única Verdadera Respuesta.