2012-06-23 37 views
9

Ho installato il pacchetto CL-PNG usando quicklisp.Come utilizzare i pacchetti installati da quicklisp?

(ql:quicklisp 'png) 

Ora voglio definire il mio pacchetto che dipende dal pacchetto CL-PNG. In questo modo:

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

Quando si compila l'ottengo questo errore:

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

Sembra che devo chiamare (require :PNG) sul REPL prima di compilare il mio pacchetto.

Cosa devo fare per rendere disponibile il pacchetto CL-PNG per il compilatore senza chiamare manualmente il numero require sul REPL?

AGGIORNAMENTO: sto utilizzando SBCL.

risposta

14

Si confondono due concetti distinti: uno system e uno package. Uno package è definito dallo standard Common Lisp ed è una raccolta di simboli, un modo per controllarne la visibilità e l'utilizzo. A system non è definito dallo standard, è una nozione introdotta da ASDF, che è una raccolta di metadati per gestire l'interdipendenza dei file in un singolo progetto per poterla compilare e caricare correttamente. Quicklisp è costruito sopra ASDF per fornire un modo per distribuire i progetti, descritto nel formato ASDF system s.

Quindi, quando si installa (quickload) un system, chiamato PNG, questo non vuol dire, che questo sistema ha un pacchetto, chiamato PNG. Il sistema definisce i pacchetti (di solito ne definisce uno, o anche molti di essi) e il modo in cui vengono chiamati è a discrezione del suo autore. La maggior parte dei progetti avrà file package.lisp o packages.lisp, dove sono definiti i loro package s.

Ma nel caso di CL-PNG sistema si sta caricando, in realtà definisce il pacchetto PNG, e dovrebbe essere disponibile nel processo in esecuzione dopo aver quickload esso. Ma dovresti caricarlo in qualche modo ogni volta che avvii il tuo sistema Lisp. ASDF fornisce un mezzo per definire un sistema di dipendenza CL-PNG, in modo che si può solo caricare solo il propriosystem, e tutto il system s dipende verrà caricato automaticamente, mettendo a disposizione tutto package s che si desidera utilizzare.

+0

Puoi entrare nei dettagli su come questo fornisce ASDF? Quale sintassi è necessaria? –

+0

Guarda il file con estensione '.asd'. Più in dettaglio la sintassi è descritta qui: http://common-lisp.net/project/asdf/asdf.html#The-defsystem-grammar –

+1

@Faheem Mitha: Per un modo rapido per iniziare con ASDF, vedi [' quickproject'] (http://xach.livejournal.com/269028.html). Per rendere il nuovo progetto disponibile per Quicklisp, inserisci il nuovo progetto nella directory 'local-projects' della tua distribuzione quicklisp (vedi http://blog.quicklisp.org/2011/11/november-quicklisp-updates.html). –

Problemi correlati