2009-07-10 16 views
7

Aquí está el salto atrás de la historia atrás si no te importa y solo quieres ver la pregunta.Pregunta de novato sobre Lisp y Paquetes

Así que he estado jugando en LISP por un tiempo. Algunas funciones básicas, algunas clases y archivo IO. Cuando me encuentro con este artículo:

http://www.adampetersen.se/articles/lispweb.htm

Y estoy encantada de probar y usar Lisp para una aplicación web. Voy y descargo los paquetes, pero durante toda la vida no sé cómo cargarlos en mi Allegro IDE.

Hmm ... bien, el sitio hunchentoot dice que muchos de los paquetes básicos están en LispWorks. Así que descargué eso. Todavía no estoy seguro de cómo obtener la fuente de los paquetes que descargué en estos IDEs. Parece que tienen binarios de los paquetes?

Oh, bueno, tal vez cambie a mi servidor ubuntu y obtenga todos los paquetes y limo de configuración (no lo he usado antes porque solo quería aprender lisp. Aprender emacs y lisp al mismo tiempo me parecía realmente desalentador) . Yo puedo obtener todos los paquetes necesarios y cargar lodo y nuevamente el mismo problema no está disponible.

Busco un poco más y veo este programa llamado ASDF. Parece que ASDF es algún tipo de generador de paquetes para lisp? No lo sé, parece confuso. Estoy a punto de darme por vencido en este punto.


Si todavía estás leyendo esto aquí está mi pregunta.
1. ¿Cómo cargo el origen de estos paquetes en mi entorno de lisp? intentar aprender lisp no ha sido demasiado difícil, pero la información sobre los entornos ha sido escasa. ¿Necesito construir los paquetes que descargo con ASDF?
2. ¿Hay alguna manera simple para que alguien simplemente se ponga en marcha en lisp sin tener que acelerar una gran cantidad de tiempo antes de aprender todas las herramientas?

Respuesta

8

Hmm ... bien, bien el sitio Hunchentoot dice mucho de los paquetes básicos son en LispWorks. Así que descargué eso.

Esto solo significa que el autor ha escrito una gran cantidad de código específico de Lispworks en Hunchentoot. No significa que Hunchentoot solo funciona en Lispworks.

Aún no estoy seguro de cómo obtener la fuente de los paquetes que descargué en estos IDEs.

Necesita usar ASDF.

Parece que tienen binarios de los paquetes?

Eso es poco probable.

Oh, bueno tal vez enferma cambio a mi servidor de Ubuntu y todos los paquetes y configuración limo> (no he usado antes porque quería aprender Lisp. Emacs aprendizaje apt-get y Lisp al mismo tiempo, parecía realmente desalentador).

Do not do it entonces. No necesita usar Emacs o Slime.

Acepto obtener todos los paquetes necesarios y cargar la baba y de nuevo el mismo problema no hay disponible.

Para obtener resultados rápidos tratar clbuild: http://common-lisp.net/project/clbuild/

yo cave alrededor de un poco más y veo este programa llamado ASDF. Parece que ASDF es un tipo de creador de paquetes para lisp? No lo sé, parece confuso.

ASDF es un poco como un Makefile para aplicaciones Common Lisp.

Estoy a punto de darme por vencido en este momento.

Eso es lo peor que se puede (en este u otro punto). Me alegra que hayas decidido publicar tus problemas aquí.

  1. ¿Cómo cargo la fuente de estos paquetes en mi entorno Lisp. intentando aprender lisp no ha sido demasiado difícil, pero la información sobre los entornos ha sido escasa. ¿Necesito construir los paquetes que descargo con ASDF?

clbuild debe darle todo lo que necesita, pero aquí hay algunos consejos si no quiere usarlo:

  1. CLISP, SBCL: ASDF es parte de su Lisp. Ejecute (require :asdf). Lispworks, Allegro: necesita descargar y cargar ASDF. Guarde asdf.lisp en algún lugar y luego ejecute (load "/path/to/asdf.lisp").
  2. Para cada biblioteca/aplicación ("sistema" en ASDF habla) necesita descargar y descomprimirlo en algún lugar. Repita hasta que todas las dependencias estén satisfechas. Anote estos lugares (directorios).
  3. Para cada lugar desde el paso # 2 agregue el lugar al registro ASDF: (push "/path/to/dir/" asdf:*central-registry*). No te olvides de la barra final.
  4. Cargue el sistema usando (asdf:oos 'asdf:load-op :system-name).
  1. ¿Hay una manera simple para alguien que acaba de empezar a trabajar en Lisp sin tener que acelerar una gran cantidad de tiempo por adelantado el aprendizaje de todas las herramientas?

Ver más arriba - utilizar clbuild.

+1

El paso 4 ahora puede ser (asdf: load-sys: system-name). – Svante

6

La manera más rápida en Ubuntu es usar los paquetes incluidos en esa distribución. Está "bien" si solo quieres probar algunas cosas, pero estas versiones son comparativamente viejas. Yo recomendaría los paquetes sbcl y slime. Si aún no conoce emacs, puede entrar en eso bastante rápido a través de su tutorial incorporado (C-h t (presione Control-h, suelte y luego presione t)).

Puede iniciar emacs, iniciar slime (a través de M-x slime), abrir un archivo lisp (C-x C-f ~/lisp/first-try.lisp) y ya está listo. Como tutorial para Lisp, creo que Practical Common Lisp es un libro muy bueno, y está disponible gratuitamente.

Ahora, cuando ha llegado a gustar Lisp, es posible que desee paquetes más actualizados. Recomendaría usar clbuild para eso (ver el enlace para más información, incluidas las preguntas frecuentes). También puede construir un nuevo sbcl (bootstrap por la versión de la distribución).

ASDF, por cierto, es solo una herramienta de definición del sistema. No sabe cómo descargar paquetes, solo sabe cómo cargar sistemas en una imagen Lisp en ejecución. En otras palabras, solo resuelve el problema de cargar automáticamente los múltiples archivos en los que se compone un "sistema" (biblioteca) en el orden correcto. Las versiones más nuevas permiten cargar un paquete (después de haberlo instalado, p.a través de clbuild) con un simple

(asdf:load-sys 'foo) 

Las versiones más antiguas muestran concepto interno de ASDF de operaciones:

(asdf:operate 'asdf:load-op 'foo) 

Lo anterior load-sys es una abreviatura para este caso de uso común. Más información (podría decirse, todo lo que necesita saber al respecto) se encuentra en el ASDF Getting Started guide. ASDF también se incluye en SBCL.

Cuando carga un archivo fuente, se compila automáticamente (produciendo .fasl archivos (carga rápida)) para que la carga sea mucho más rápida la próxima vez.

2

Probablemente una de las maneras más rápidas para comenzar es usar Lisp in a Box (o un spin-off como LispBox). Estos son conjuntos completos de todo lo que necesitas.

También puede probar el Lisp Resource Kit, que es un CDROM de arranque con herramientas Lisp y documentación, todo ya configurado para usted. ¡Simplemente colóquelo en su unidad de CDROM y arranque!

2

Todas estas respuestas son buenas, sin embargo, se han vuelto un poco obsoletas con la nueva popularidad de Quicklisp. En términos generales, quicklisp es el administrador de paquetes para asdf. Una vez que Quicklisp está instalado en un sistema, puede usar (ql:quickload "name of lisp library") para cargar esa biblioteca en su entorno de lisp, incluida la descarga y cualquiera de sus dependencias, si es necesario. Por ejemplo, para descargar, instalar y cargar Hunchentoot y todas sus dependencias, use (ql:quickload "hunchentoot"). En sesiones de lisp posteriores, al llamar de nuevo al (ql:quickload "hunchentoot"), simplemente cargará la versión que ya se descargó e instaló, lo que hace que ql:quickload sea una manera sencilla de cargar cualquier biblioteca disponible localmente o de forma remota. Para instalar Quicklisp, lo remito a quicklisp.org.

explicación más detallada

Lisp funciona un poco diferente de otros idiomas cuando se trata de las bibliotecas.Lo primero que debe saber es que el lenguaje en sí no proporciona casi ninguna funcionalidad de biblioteca: tiene load (que pasa y ejecuta cada línea en un archivo como si las hubiera escrito en REPL) y compile-file (que crea una "carga rápida"). "archivo, una versión precompilada del archivo que load sy puede realizar mucho más rápido). Usando exactamente lo que proporciona el lenguaje central, para cargar una biblioteca debe ir a cada uno de sus archivos y load (o (load (compile-file "filename")), para una mejor velocidad de carga/rendimiento). Esto se volvió tedioso, por lo que se creó una variedad de bibliotecas para administrar la carga de bibliotecas, y en este momento asdf es el rey (tanto que muchas implementaciones de lisp realmente lo agrupan). En la terminología asdf, las bibliotecas se denominan "sistemas" y los archivos .asdf describen todos los metadatos involucrados en su carga, los sistemas de los que dependen y en qué orden se cargan los archivos, en su mayoría, pero aún pueden ser bastante complejos. Quicklisp, entonces, se sienta encima de asdf. Básicamente, cuando asdf descubre que no puede encontrar un sistema, Quicksilp entra y verifica si ese sistema está disponible desde uno de los repositorios en línea de Quicklisp, y si es así, lo descarga y tiene asdf en camino. ql:quickload es básicamente una envoltura alrededor de la maquinaria asdf para cargar un sistema que permite que quicklisp ayude según sea necesario.