2009-07-09 6 views
16

He sido un administrador de sistemas UNIX durante mucho tiempo, y aparte de automatizar tareas con scripts de shell, algo de trabajo PHP ligero, y algunos programas simples de C, ' Nunca he hecho mucho en el camino de la programación. Recientemente decidí estirar un poco mi mente y aprender Common Lisp.Configuración de un entorno Common Lisp funcional para el aspirante Lisp novato

Estoy a la mitad de Touretzky's "Gentle Intro" y, habiendo llegado al capítulo de E/S, quiero ir más allá de escribir cosas en el REPL mientras repaso el libro y los ejercicios. El problema es que no puedo encontrar un howto/tutorial decente para conseguir 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, sin importar que trate de pasar por las tres. He robado varios libros CL gratuitos en línea y todos son independientes del entorno, suponiendo que escribirás cosas en el REPL o cargarás archivos fuente.

Realmente haría esta experiencia mucho más agradable si pudiera encontrar una introducción decente para configurar un entorno Emacs para Common Lisp que me permite editar en modo Lisp en una ventana (la función y la autocompleción variable serían realmente agradable aquí), vea los resultados de evaluar expresiones únicas (tanto de salida como de retorno) en otro, así como también poder decir que todo el búfer se evalúe y "ejecute" mientras veo los resultados en alguna parte.

Cualquiera y todos los indicadores serán muy apreciados.

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

Respuesta

3

¿Has probado Lispbox?

+0

traté de empezar a trabajar con práctica Common Lisp, utilizando Lispbox, pero no tener una configuración de FreeBSD, y tuve dificultad para intentar ejecutarlo en mi plataforma. Espero que cuando tenga más experiencia, podría volver a intentarlo después de terminar "Gentle Intro". –

2

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

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

modelo

Este uso trabaja para conchas, Tcl, Lisp, cualquier cosa con un intérprete ...

El wiki has a lot of good information.

+0

SLIME es mucho más completo que otros intérpretes "inferiores" generados por Emacs. La mayoría de todo está integrado en su ventana de edición, por lo que no necesitará consultar el intérprete actual ('* inferior lisp *'). – jrockway

+1

Dulce, -2 sin ninguna razón en particular. ¿Puedo obtener un -3? –

+0

+1 Gracias por las útiles referencias. –

-2

Puedo decir que Emacs es un buen entorno para escribir Lisp, ya que lo utilicé en la universidad para ese fin. El buffer *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 la edición-compilación-y-ejecución. (Lo siento, no soy más específico, han pasado 15 años).

+0

El búfer '* scratch *' es para Emacs Lisp, no Common Lisp. Sin embargo, existe una extensión contrib SLIME para proporcionarle un búfer CL scratch. – jrockway

+0

Además, nadie desarrolla Lisp con Emacs y la línea de comandos. Todo se puede hacer dentro de SLIME. – jrockway

+0

No diría que "nadie" desarrolla usando un editor de texto y la línea de comando. Conozco a los hackers que se sienten cómodos con él. Simplemente no crea un 'entorno de Common Lisp'. –

29

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

SLIME ya no hace mucho más, por lo que necesita la configuración . La configuración de emacs se realiza en su archivo ~/.emacs. Visite ese archivo (C-x C-f ~/.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 lo tiene instalado en su BABA "directorio del sitio", podrás también quiere añadir este antes de que esas líneas:

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

(Cambiar las rutas de acceso a estos la ubicación correcta, por supuesto.)

la pieza clave es el limo-configuración, esta carga una variedad de módulos opcionales, incluyendo el REPL. (También considero la sangría de fantasía, y autodoc esencial.)

De todos modos, puede cargar esto en sus Emacs en ejecución con M-x eval-buffer, o poniendo el punto dentro de cada sexp y presionando C-M-x. (También puede señalar el final de la sexp y presiona C-x C-e. Hay una variedad de maneras de evaluar Emacs Lisp en Emacs, pero que no es realmente relevante para el aprendizaje de CL.)

En este punto, usted debe ser capaz de escribir M-x slime y llevarlo a su REPL. Antes de que eso suceda, su ceceo se cargará, SLIME lo hará para que compile Swank (el lado CL de SLIME), y verá que ocurre . Esto solo ocurre una vez, sin embargo, la próxima vez que SLIME se iniciará más rápido .

En REPL, puede escribir los comandos de Common Lisp y ver el resultado de su evaluación. Al presionar TAB para completar algo aparecerá una ventana de de posibles terminaciones; esto es una finalización inteligente, por lo que al escribir algo así como "d-b" aparecerá una lista que contiene "binduring-bind". Muy útil. M-/también completará los símbolos que ya ha escrito en algún lugar dentro de Emacs; otro gran momento ahorrador. (Esto funciona en todas partes en Emacs, por cierto, y se llama "expansión de abreviatura dinámica ")

Anteriormente, dijo que el REPL era aburrido, así que vamos a abrir un archivo real. Presione C-x C-f test.lisp. Como era de esperar, esto abrirá un buffer editing.lisp, que se creará cuando guarde por primera vez el archivo (C-x C-s). Este archivo Lisp tiene conocimiento de SLIME, por lo que cualquier cosa que escriba puede validarse fácilmente ejecutando Lisp. Completar ficha, inspección de clase, pruebas interactivas, etc. están disponibles. Por ejemplo, escriba algo como (+ 1 2) y presione C-x C-e. Usted verá el resultado, según lo evaluado por la ejecución de Lisp, en la parte inferior de la ventana. Esto le permite probar expresiones individuales al escribir 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 que se ejecuta en una variedad de formas; Normalmente uso C-M-x.Ahora puede volver a cambiar a la memoria intermedia REPL (C-x b *slime-repl sbcl* o similar) y escribir (my-1+ 42) y ver imprimir el resultado 43.

Otra forma de llevar las funciones al funcionamiento de Lisp es compilar y cargar todo el archivo con C-c C-k.

De todos modos, eso es lo básico de usar SLIME y Emacs. Hay obviamente muchas más características disponibles, pero esto debería darle una muestra de la programación de Lisp con SLIME. Una última cosa que mencionaré, Emacs es en gran medida autodocumentado, por lo que si desea obtener más información, Emacs puede ayudarlo. Mientras está en su búfer Lisp, puede escribir C-h m para obtener una lista completa de comandos que puede utilizar al editar Lisp. Puede hacer clic en en los enlaces para obtener más información sobre cada función.

¡Diviértete!

+0

+1 Muy útil. Por cierto, no dije que el REPL era "aburrido", solo que no creía que fuera apropiado editar grandes cantidades de cosas. Tal vez estoy completamente ignorante sobre cómo los programadores Lisp experimentados trabajan en proyectos reales en este ambiente Por cierto, después de escribir funciones y asignar variables al REPL, ¿hay alguna manera de ver lo que tienes allí? Un equivalente a "lista" en BASIC. (Lo sé, lo sé ... eeeeew!) –

+0

@Geoff Fritz: Esto probablemente se está adelantando a su exploración, pero si crea su propio paquete (espacio de nombres) para trabajar, y lo usa en REPL, entonces puede enumerar todos los símbolos que se definen en ese paquete , ver cuáles de ellos corresponden a las funciones, y hacer otras cosas introspectivas como esa. (Ayuda si es tu propio paquete, porque el paquete CL-USER predeterminado tendrá mucho más que tu trabajo en él.) No tiendo a hacer mucha codificación en el REPL directamente, edito en un buffer separado y evaluar (como la sugerencia de SLIME aquí, excepto con ELI de Franz). – khedron

+3

Si bien SBCL está muy bien, no diría que es "el mejor". – Svante

3

Lispbox & lodos son excelentes respuestas, pero si quieres algo aún más simple, sólo para jugar con, usted podría considerar la versión gratuita de LispWorks Personal o Allegro CL Free Edition. No he usado tampoco en Linux, pero parece que ambos vienen con GUI. Habrá tamaño de pila u otras limitaciones (ya que las versiones completas no son gratuitas), pero puede ser más fácil sumergirse.

+0

Gracias por la sugerencia, comprar mi plataforma es FreeBSD. –

+0

@Geoff Fritz: LispWorks Personal y Allegro CL Free dicen que están disponibles para FreeBSD. http://www.lispworks.com/support/system-requirements.html http://franz.com/downloads/ – khedron

+0

He visto a Pascal Costanza usar uno de estos, y ambos funcionan básicamente como Emacs + SLIME . Excepto, por supuesto, el editor no es Emacs. Son buenos para un comienzo rápido, pero no veo ninguna razón para pagar por menos funcionalidades que las implementaciones gratuitas. (Si estás en Windows, la ecuación cambia, pero dijiste que estás en FreeBSD, así que ...) – jrockway

2

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

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

Asumiendo que tiene Emacs y SBCL ya instalado, lo siguiente que se levanta y se ejecuta con baba. (También es necesario fiesta, darcs, CVS, etc, pero los puertos de FreeBSD incluir todos estos, por lo que yo sé.)

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

Usted no tiene que (de hecho, no debe) modificar su .emacs para esto. Si ya jugó con una instalación manual de SLIME, limpie los cambios anteriores de .emacs. clbuild hace la configuración de baba para usted.

Si lo desea, clbuild también puede recuperar y construir una reciente SBCL 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 le da la segunda ventana para jugar con
  • Cc Ck compila & carga el búfer actual
  • Tiene completación de pestañas incorporada, pero también otras funciones de finalización. Personalmente, me encanta la terminación borrosa C-c M-i.
  • respuesta
  • de jrockway tiene buenos consejos adicionales sobre los comandos de Emacs que no voy a repetir aquí