Leyendo "A Programmer's Guide to Common Lisp"

Los entusiastas de Common Lisp reflexionan sobre cómo aprender y trabajar productivamente con el lenguaje, contrastando el REPL orientado a líneas con herramientas como IPython y recomendando entornos integrados en el editor como Emacs+SLIME, Vim+VLIME o incluso configuraciones basadas en Jupyter para el desarrollo interactivo. Gran parte del intercambio se centra en los constructos explícitos de ámbito y enlazado de Lisp (por ejemplo, `let` frente a `let*`), que algunos ven como poderosos para razonar y hacer metaprogramación y otros como una carga histórica que dificulta la adopción. Junto con las herramientas y el diseño del lenguaje, los participantes celebran libros antiguos de Lisp y programación e incluso entornos clásicos de Lisp machine como Medley como formas singularmente coherentes y autocontenidas de explorar la computación simbólica.

REPL de Common Lisp y flujo de trabajo iterativo

  • Varios comentaristas encuentran los REPL de CL incómodos en comparación con IPython, especialmente para fragmentos multilinea y la edición del historial.
  • Los usuarios experimentados dicen que la forma “correcta” no es escribir en un REPL de terminal desnudo, sino usar un REPL integrado en el editor (“listener”).
  • En Emacs+SLIME o Vim+Slimv/Vlime, escribes código en un buffer y envías expresiones, regiones o formas al REPL mediante atajos de teclado. Esto permite evaluación multilinea y reevaluación fácil sin depender del historial basado en líneas.
  • Los REPL de CL están basados en expresiones, no en líneas; para múltiples expresiones secuenciales puedes envolverlas en progn o let para que sea una sola forma que editar y volver a ejecutar.
  • Algunas implementaciones o complementos (CLISP con readline, rlwrap, linedit, kernels de Jupyter para CL) ofrecen un historial de líneas más parecido al de IPython, pero la mayoría se centra más bien en la integración con el editor.

Enlazado de variables, ámbito y let vs let*

  • Un largo subhilo debate por qué CL usa formas como let/let* en lugar de una sintaxis de “declarar variable en cualquier parte” como var x = y.
  • Quienes los defienden argumentan que el ámbito explícito es una ventaja: los enlazados quedan localizados, son más fáciles de razonar y resultan más amigables para macros y metaprogramación. let es paralelo al enlazado de parámetros de una lambda; let* expresa dependencias secuenciales.
  • Los críticos encuentran la distinción confusa y poco idiomática en comparación con lenguajes al estilo C o con Schemes que permiten define dentro de bloques, y sostienen que obliga a anidación extra y perjudica la legibilidad.
  • Otros señalan que muchos lenguajes no C históricamente también requerían declaraciones al principio de los ámbitos; las apelaciones a “lo que hacen la mayoría de los lenguajes ahora” se ponen en duda.
  • Se mencionan varias macros (nest, macros tipo bloque que reescriben var en let anidados, construcciones de TXR Lisp) como formas de obtener estilos sintácticos alternativos sin cambiar el lenguaje central.
  • Contexto histórico: let surgió más tarde como azúcar sintáctico sobre lambda; let* llegó después todavía, y la nomenclatura es en gran medida herencia y no un rediseño nuevo.

Libros, estilo de documentación y aprendizaje de Lisp

  • Los comentaristas elogian libros técnicos antiguos (incluidos textos de Lisp y AWK) por ser autocontenidos, estar organizados linealmente y no asumir búsquedas constantes en la web.
  • A muchos les gusta leer manuales y libros de lenguajes desactualizados por su perspectiva, su estilo y esa sensación de “instantánea en el tiempo”.
  • Entre las rutas concretas para aprender Lisp se mencionan introducciones aptas para principiantes y libros de Common Lisp enfocados en IA.
  • Algunos contraponen plataformas antiguas y estables (DOS, primeras versiones de Windows, sistemas Lisp clásicos) con la documentación moderna, fragmentada y solo web, que es más difícil de recorrer linealmente.

Lisp Machines, Medley y sistemas relacionados

  • A algunos les gusta Medley/Interlisp como un entorno autocontenido al estilo de una Lisp machine, aunque otros prefieren implementaciones modernas de CL junto con Emacs o IDEs comerciales.
  • Se señala que Mathematica tiene un aire algo parecido a Lisp y una biblioteca incorporada enorme, pero sus objetivos y su implementación difieren de los sistemas de Lisp machine.