Desea buscar un equilibrio entre simplicidad y limpieza, características atractivas y una plataforma que le permita escribir software interesante y útil (para usted mismo), además de servir como herramienta de aprendizaje. (Esto último lo mantendrá activo y aprendiendo por mucho más tiempo). Aquí hay algunas posibilidades:
Esquema. Probablemente el más limpio de todos los dialectos. Esta es sin duda la razón por la que The Little Schemer se tradujo de LISP a Scheme. La quinta especificación estándar de Scheme, R5RS , es una educación maravillosa en sí misma; puede ser el lenguaje y la especificación de biblioteca más agradable que he leído, así como el más corto que es razonablemente completo. La plataforma PLT Scheme (ahora Racket) incluye un intérprete y compilador bastante decente, es buena para la creación de scripts y también tiene algunas herramientas visuales que la hacen excelente para el aprendizaje.
Common Lisp. Probablemente la variante más portátil y completa, esto es probablemente lo que desea si desea escribir cosas como software comercial. El estándar define bibliotecas extensas, y hay muchas más disponibles más allá de eso, tiene CLOS , que probablemente le enseñará más sobre OO que cualquier lenguaje 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 se refieren a funciones), no ser tan limpio y simple (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), no tener macros higiénicas y enfatizar la recursividad mucho menos que Scheme.
Clojure.Esto se ejecuta en la JVM, lo que puede ser una ventaja para los desarrolladores de Java. Tiene algunas verrugas (por ejemplo, debe solicitar explícitamente la optimización de la llamada de cola, aunque esto puede cambiar algún día si se agrega TCO a la JVM). Las macros, aunque no son higiénicas, tienen algunas características para ayudarlo a evitar la captura de variables, por lo que puede capturar variables si realmente lo desea, con menos riesgo de hacerlo accidentalmente que en CL. Tiene fácil acceso a todas las bibliotecas de Java; probablemente sea algo bueno 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 sobre los nuevos métodos para tratar la programación paralela y concurrente. Parece que Clojure es tan útil para aplicaciones de producción grandes 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 harías. cuando estás aprendiendo.
Emacs Lisp. En términos de un LISP, este no es uno de los mejores ejemplos que existen. Una de sus mayores fallas es el alcance dinámico, pero hay muchas otras. Sin embargo, si es un usuario de Emacs, esta puede ser la herramienta más poderosa que puede aprender para mejorar su uso del editor. Sin embargo, para mí es una pregunta abierta cuánto aprendería realmente al aprender Emacs Lisp, más allá de cómo extender Emacs; No sé con qué frecuencia se usan realmente en Emacs Lisp técnicas interesantes como las funciones de orden superior.
Actualización 2018
Ha pasado casi una década desde que escribí esta publicación y la familia de lenguajes Lisp ahora parece estar ganando una tracción significativa en la conciencia general del programador. Gran parte de esto parece estar relacionado con Clojure, que no solo se ha convertido en un dialecto separado de Lisp por derecho propio, presentando muchas de sus propias buenas ideas, sino que ahora tiene una versión casi idéntica dirigida a JavaScript y ha inspirado a muchos otros Lisps. dirigidas a otras plataformas. Por ejemplo, Hy apunta a CPython AST y bytecode, apuntando primero a la interoperabilidad con Python, pero usando ideas de Clojure "en caso de duda". (Aunque de las últimas confirmaciones, esta última puede estar cambiando un poco).
El gran cambio que esto trae en su proceso de toma de decisiones es que también debería estar mirando cualquier lenguaje Lisps o similar a Lisp que esté disponible e interoperar con lenguajes o plataformas que ya usa, ya sea Perl , Ruby , Erlang , Go o incluso C ++ en microcontroladores .