emacs lisp

emacs - Configuración de un entorno Common Lisp en funcionamiento para el aspirante a novato de Lisp



(7)

¿ Lispbox ?

He sido administrador de sistemas UNIX durante mucho tiempo, y aparte de automatizar tareas con shell scripting, algunos trabajos PHP ligeros y algunos programas simples en C, nunca he hecho mucho en la programación. Recientemente decidí estirar un poco mi mente y aprender Common Lisp.

Estoy a mitad de camino de la "Introducción suave" de Touretzky y, después de haber llegado al capítulo de E / S, quiero ir más allá de escribir cosas en el REPL mientras recorro el libro y los ejercicios. El problema es que no puedo encontrar un tutorial decente sobre cómo obtener un entorno de trabajo decente.

He instalado emacs (que en sí mismo es un cambio difícil, ya que he usado vi durante casi 20 años), SLIME y varias implementaciones de CL. Sin embargo, la documentación de cualquiera de estas piezas es enorme, no importa tratar de leer las tres. He hojeado varios libros de CL en línea gratuitos y todos ellos son ajenos al medio ambiente, asumiendo que estarás escribiendo cosas en el REPL o cargando archivos de origen.

Realmente haría esta experiencia mucho más placentera si pudiera encontrar una introducción decente para configurar un entorno de Emacs para Common Lisp que me permita editar en modo Lisp en una ventana (la función y la función de finalización automática de variables serían muy agradables aquí), vea los resultados de evaluar expresiones individuales (tanto el valor de salida como el de retorno) en otra, así como poder decirle a todo el búfer que se evalúe y "ejecute" mientras veo los resultados en alguna parte.

Cualquier y todos los punteros serían muy apreciados.

EDITAR: Mi plataforma es FreeBSD / amd64, y prefiero las soluciones de código abierto.


Bueno, un buen lugar para comenzar sería la sección de ejecución de las páginas de información .

En general, cuando trabaja con un lenguaje interpretado en Emacs, edita los archivos de origen e interactúa con un proceso inferior (un nuevo proceso generado por Emacs, en este caso un proceso lento). Puede evaluar un sexp (expresión balanceada), una región o todo el búfer con simples pulsaciones de tecla. Esos comandos envían el código al proceso lisp y lo evalúan.

Este modelo de uso funciona para shells, Tcl, lisp, cualquier cosa con un intérprete ...

La wiki tiene mucha información buena .


Hay diferentes formas de configurar un entorno Lisp, desde los enfoques manuales hasta los instaladores listos para usar.

La siguiente respuesta es para clbuild , que siempre descarga versiones nuevas de todos los paquetes para usted:

Suponiendo que ya tiene Emacs y SBCL instalados, lo siguiente le permite comenzar a utilizar SLIME. (También necesita bash, darcs, CVS, etc., pero los puertos de FreeBSD incluyen todos estos, por lo que sé).

$ darcs get --set-scripts-executable http://common-lisp.net/project/clbuild/clbuild $ ./clbuild/clbuild install slime $ ./clbuild/clbuild slime

No tiene que (de hecho, no debe) modificar su .emacs para esto. Si ha jugado con una instalación manual de SLIME anteriormente, elimine los cambios anteriores de .emacs. clbuild hace la configuración de limo por ti.

Si lo desea, clbuild también puede buscar y construir un SBCL reciente para usted:

$ ./clbuild/clbuild install sbcl $ ./clbuild/clbuild compile-implementation sbcl # afterwards you can uninstall the FreeBSD-provided Lisp used for bootstrapping

En cuanto a sus preguntas de uso:

  • Cx 5 2 te da la segunda ventana para jugar.
  • Cc Ck compila y carga el buffer actual
  • Hay una función de finalización de pestañas integrada, pero también otras características de finalización. Personalmente me encanta la finalización de Cc Mi fuzzy.
  • La respuesta de jrockway tiene buenos consejos adicionales sobre los comandos de emacs que no repetiré aquí.

Lispbox y SLIME son buenas respuestas, pero si quieres algo aún más simple, solo para jugar, puedes considerar la versión gratuita de LispWorks Personal o Allegro CL Free Edition . Yo tampoco he usado Linux, pero ambos parecen venir con GUIs. Habrá un tamaño de pila u otras limitaciones (ya que las versiones completas no son gratuitas), pero pueden ser más fáciles de adentrarse.



Puedo decir que Emacs es un buen ambiente para escribir Lisp, ya que lo usé en la universidad para ese fin. El búfer *scratch* proporciona un buen lugar para el código de prueba. Los documentos del compilador deben indicar cómo llamarlos, para que pueda escribir sus archivos en el disco y luego ejecutarlos en una ventana de shell, o usar uno de los modos de Emacs para integrar edit-compile-and-run. (Lo siento, no soy más específico, han pasado 15 años).


Supongamos que tiene emacs en ejecución y ha retirado SLIME de CVS y lo ha instalado. Esto debería ser fácil con cualquier distribución de Linux; apt-get install emacs slime hace por mí. (También debe instalar SBCL, la mejor implementación de Common Lisp).

SLIME out of the box ya no hace mucho, por lo que necesita configuración. La configuración de emacs se realiza en su archivo ~/.emacs . Visite ese archivo ( Cx Cf ~/.emacs) . Tengo algo como esto, que carga una variedad de golosinas:

(eval-after-load "slime" ''(progn (setq slime-lisp-implementations ''((sbcl ("/usr/bin/sbcl")) (ecl ("/usr/bin/ecl")) (clisp ("/usr/bin/clisp")))) (slime-setup ''( slime-asdf slime-autodoc slime-editing-commands slime-fancy-inspector slime-fontifying-fu slime-fuzzy slime-indentation slime-mdot-fu slime-package-fu slime-references slime-repl slime-sbcl-exts slime-scratch slime-xref-browser )) (slime-autodoc-mode) (setq slime-complete-symbol*-fancy t) (setq slime-complete-symbol-function ''slime-fuzzy-complete-symbol))) (require ''slime)

Si no tiene SLIME instalado en su "directorio de sitios", también querrá agregar esto antes de esas líneas:

(add-to-list ''load-path "~/elisp/slime/") (add-to-list ''load-path "~/elisp/slime/contrib")

(Por supuesto, cambie estos caminos a la ubicación correcta).

La parte clave es la configuración de limo, que carga una variedad de módulos opcionales, incluido el REPL. (También considero la sangría elegante, y autodoc esencial).

De todos modos, puedes cargar esto en tus emacs en ejecución con Mx eval-buffer , o colocando el punto dentro de cada sexp y presionando CMx . (También puede señalar el final de la sexp y presionar Cx Ce . Hay varias maneras de evaluar Emacs Lisp en Emacs, pero eso no es realmente relevante para aprender CL).

En este punto, debería poder escribir Mx slime y ser llevado a su REPL. Antes de que eso suceda, se cargará su luz, SLIME le indicará que compile Swank (el lado CL de SLIME), y verá que eso sucede. Sin embargo, esto solo ocurre una vez, la próxima vez que SLIME se inicie más rápido.

En el REPL, puede escribir comandos Common Lisp y ver el resultado de su evaluación. Al presionar la tecla TAB para completar algo aparecerá una ventana de posibles terminaciones; esta es una finalización inteligente, por lo que al escribir algo como "db" aparecerá una lista que contiene "desestructuración-enlace". Muy útil. M- / también completará los símbolos que ya ha escrito en algún lugar dentro de Emacs; Otro gran ahorro de tiempo. (Esto funciona en todas partes en Emacs, BTW, y se denomina "expansión de abreviatura dinámica").

Antes dijiste que el REPL era aburrido, así que abramos un archivo real. Presione Cx Cf test.lisp . No es sorprendente que esto abra un buffer de edición test.lisp, que se creará cuando guarde el archivo por primera vez ( Cx Cs ). Este archivo Lisp tiene conocimiento de SLIME, por lo que cualquier cosa que escriba puede ser validada fácilmente por la ejecución de Lisp. Completar ficha, inspección de clase, pruebas interactivas, etc. están disponibles.

Como ejemplo, escriba algo como (+ 1 2) y presione Cx Ce . Verá el resultado, según lo evaluó Lisp en ejecución, en la parte inferior de la ventana. Esto le permite probar expresiones individuales a medida que las escribe en el archivo.

El siguiente paso es escribir una función completa, tal vez:

(defun my-1+ (x) (+ x 1))

Puede cargar esta función en el Lisp en ejecución de varias maneras; CMx usar CMx . Ahora puede volver a cambiar al búfer REPL ( Cx b *slime-repl sbcl* o similar) y escribir (my-1+ 42) y ver el resultado 43 impreso.

Otra forma de llevar las funciones al Lisp en ejecución es compilar y cargar todo el archivo con Cc Ck .

De todos modos, eso es lo básico de usar SLIME y Emacs. Obviamente, hay muchas más funciones disponibles, pero esto debería darle una idea de la programación de Lisp con SLIME. Una última cosa que mencionaré, Emacs es en gran medida autodocumentada, por lo que si desea obtener más información, Emacs puede ayudarlo. Mientras está en su búfer Lisp, puede escribir Ch m para obtener una lista completa de los comandos que puede usar mientras edita Lisp. Puede hacer clic en los enlaces para obtener más información sobre cada función.

¡Que te diviertas!