world programming learn hello compiler common caracteristicas lisp dialect

programming - lisp learn



¿Qué dialecto de Lisp debería aprender? (9)

Sé que hay algunos dialectos diferentes de Lisp. Después de haber decidido que aprender Lisp sería una nueva experiencia intelectual, me gustaría saber qué dialecto de Lisp aprender y por qué.

¿Hay uno que sea más popular que los otros? ¿Alguno de ellos es más "completo", como en, mejor documentado y respaldado? ¿Cuáles son los pros y los contras de este dialecto?


Aprendí Scheme en la escuela. Fue una gran experiencia de aprendizaje y nunca olvidaré los fundamentos de la programación funcional. Probablemente no importe la versión de LISP que elija, siempre que comprenda el núcleo de su utilidad: el cálculo lambda sin estado.

Aquí hay un interesante artículo sobre por qué MIT cambió de Scheme a Python en su curso de programación introductoria.


Desea buscar un equilibrio entre simplicidad y limpieza, características atractivas y una plataforma que le permita escribir un software útil e interesante (para usted) y que sirva como una herramienta de aprendizaje. (Esto último te mantendrá activo y aprenderás durante mucho más tiempo). Aquí hay algunas posibilidades:

  1. Esquema. Probablemente el más limpio de todos los dialectos. No cabe duda de por qué The Little Schemer fue traducido de LISP a Scheme. La quinta especificación estándar de Scheme, R5R2 , es una maravillosa educación en sí misma; puede ser la mejor especificación de lenguaje y biblioteca que he leído, así como la más corta que sea razonablemente completa. La plataforma PLT Scheme incluye un intérprete y un compilador bastante decente, es bueno para el scripting y también tiene algunas herramientas visuales que lo hacen excelente para el aprendizaje.

  2. Common Lisp. Probablemente la variante más portátil y completa, es más probable que sea lo que quiere si quiere escribir cosas como software comercial. El estándar define bibliotecas extensas, y muchas más están disponibles más allá de eso, tiene CLOS , que probablemente le enseñará más sobre OO que cualquier lenguaje de OO, y algunos de los compiladores son muy buenos. Las desventajas incluyen algunas verrugas que Scheme no tiene (como tener un espacio de nombres separado para las variables que hacen referencia a funciones), no ser tan limpias y simples (como es el caso de cualquier cosa que haya tenido que tener las extensiones y hacer los compromisos necesarios). para aplicaciones grandes en el mundo real), sin tener macros higiénicas, y haciendo hincapié en la recursión mucho menos que Scheme.

  3. Clojure. Esto se ejecuta en la JVM, que puede darle una ventaja allí para los desarrolladores de Java. Tiene algunas verrugas (por ejemplo, debe solicitar explícitamente la optimización de llamadas finales, aunque esto puede cambiar un día si se agrega TCO a la JVM). Las macros, si bien no son higiénicas, sí tienen algunas características que lo ayudarán a evitar la captura variable, por lo que puede capturar variables si realmente lo desea, mientras corre menos riesgo de hacerlo accidentalmente que en CL. Tienes fácil acceso a todas las bibliotecas de Java; eso es probablemente una buena cosa para el código del "mundo real", y bastante inútil en términos de aprendizaje. Tiene un conjunto de bibliotecas para estructuras de datos persistentes y soporte para STM, lo que lo hace muy interesante desde un punto de vista concurrente; esto hace que sea probablemente su mejor apuesta si está interesado en aprender más acerca de los nuevos métodos para lidiar con la programación simultánea y paralela. Parece que Clojure es tan útil para grandes aplicaciones de producción como Java, en el sentido de que tendrá la capacidad de hacer las "cosas feas" que haces en aplicaciones de producción que preferirías no hacer y no hacer. cuando estás aprendiendo

  4. Emacs Lisp. En términos de un LISP, este no es uno de los mejores ejemplos que hay. Una de sus fallas más grandes es el alcance dinámico, pero hay muchas otras. Sin embargo, si usted es un usuario de Emacs, esta puede ser la herramienta más poderosa que puede aprender para mejorar su uso del editor. Lo mucho que aprenderías realmente aprendiendo Emacs Lisp, más allá de cómo extender Emacs, para mí es una pregunta abierta; No sé con qué frecuencia técnicas realmente interesantes, como las funciones de orden superior, se usan realmente en Emacs Lisp.


Diría Scheme, únicamente por Little Schemer , que es uno de los libros más alucinantes pero extremadamente duros que he intentado leer.


Diría todos, al menos al principio. Eventualmente, probablemente desarrollará una preferencia por Scheme o Common Lisp, pero ambos tienen suficientes diferencias que es mejor manejar todo lo que existe.

Scheme tiene continuaciones, por ejemplo, y es bueno aprender sobre aquellos en Scheme, aunque pueden implementarse en Common Lisp.

Conocer la diferencia entre el alcance léxico y el dinámico es importante, y si aprende Common Lisp y elisp, encontrará las implicaciones de ambos.


Fue una especie de pregunta "cargada" para empezar, pero OP probablemente no lo sabía. Por lo general, los usuarios comunes y de Scheme son como "personas" de PC y Apple, no se mezclan. Cuál es mejor probablemente no sea tan relevante como cuál "funciona" para usted. Realmente, no hay mucha diferencia. Probablemente una preferencia por uno sobre el otro tal vez influida por cuál aprendes primero. (Para mí, una lista vacía debe ser "nada", conocida en CL como NIL, y eso me convierte en Common Lisper.) Me gusta la integración de SBCL con Slime usando EMACS, pero SBCL no es para todos. Por un lado, SBCL es muy estricto. Si solo quiere "divertirse", el clisp de GNU es fácil y está disponible para prácticamente cualquier plataforma.


LFE (Lisp Flavoured Erlang) estaría bien. Puede tener la sintaxis lisp en la parte superior de la VM Erlang.


Prefiero CL, ya que me gusta la programación orientada a objetos, y CLOS es el mejor sistema de objetos que existe.


Puedo recomendar Common Lisp en SBCL . Esta combinación es rápida, poderosa, madura y bien documentada.


También Clojure está ganando mucho interés en estos días, y por una buena razón. Grandes estructuras de datos, soporte de concurrencia profundamente bueno (pone a Scheme y CL a la vergüenza en este sentido), y una gran comunidad. También es relativamente simple, CL es tan complicado como C ++.

Esto no quiere decir que no disfruto CL o Scheme. Aprendí Scheme con SICP. Y CL me trajo a Clojure. Todo depende de tus objetivos, supongo. Si quieres aprender un Lisp que sea inmensamente práctico, ve a Clojure. De lo contrario, CL o Scheme son geniales.