2012-06-23 16 views
9

He instalado el paquete CL-PNG usando quicklisp.¿Cómo usar los paquetes instalados por quicklisp?

(ql:quicklisp 'png) 

Ahora quiero definir mi propio paquete que depende del paquete CL-PNG. De este modo:

(defpackage :FOO 
    (:use :CL :PNG) 
    (:export :BAR)) 

Al compilar se me sale este error:

The name "PNG" does not designate any package. 
    [Condition of type SB-KERNEL:SIMPLE-PACKAGE-ERROR] 

Parece que tengo que llamar (require :PNG) en el REPL antes de compilar mi paquete.

¿Qué tengo que hacer para que el paquete CL-PNG esté disponible para el compilador sin llamar manualmente al require en el REPL?

ACTUALIZACIÓN: Estoy usando SBCL.

Respuesta

14

Confunde dos conceptos diferentes: un system y un package. Un package está definido por el estándar Common Lisp y es una colección de símbolos, una forma de controlar su visibilidad y uso. Un system no está definido por el estándar, es una noción introducida por ASDF, que es una colección de metadatos para administrar interdependencias de archivos en un único proyecto con el fin de poder compilarlo y cargarlo correctamente. Quicklisp se basa en ASDF para proporcionar una forma de distribuir proyectos, que se describe en la forma de ASDF system s.

Así que cuando se instala (quickload) un system, llamado PNG, esto no quiere decir, que este sistema tiene un paquete, llamado PNG. ¿El sistema define algún paquete (generalmente define uno, o incluso varios de ellos) y cómo se llaman es a discreción de su autor? La mayoría de los proyectos tendrán package.lisp o packages.lisp archivos, donde se definen sus package s.

Pero en el caso del sistema CL-PNG que está cargando, realmente define el paquete PNG, y debería estar disponible en el proceso en ejecución después de quickload. Pero deberías de alguna manera cargarlo cada vez que inicies tu sistema Lisp. ASDF proporciona un medio para definir una dependencia de CL-PNG sistema, por lo que sólo puede cargar sólo su propiosystem, y todo el system s depende será cargado automáticamente, poniendo a disposición todas package s que desea utilizar.

+0

¿Puedes entrar en detalles sobre cómo ASDF proporciona esto? ¿Qué sintaxis es necesaria? –

+0

Mire el archivo con la extensión '.asd'. En más detalle, la sintaxis se describe aquí: http://common-lisp.net/project/asdf/asdf.html#The-defsystem-grammar –

+1

@Faheem Mitha: para una forma rápida de comenzar con ASDF, consulte [' quickproject'] (http://xach.livejournal.com/269028.html). Para que el nuevo proyecto esté disponible para Quicklisp, coloque el nuevo proyecto en el directorio 'local-projects' de su distribución de quicklisp (consulte http://blog.quicklisp.org/2011/11/november-quicklisp-updates.html). –

Cuestiones relacionadas