L'esempio che segue è riportata nella Paul Graham ANSI Common Lisp come esempio di fare incapsulamento:è meglio mettere il defpackage in un file separato durante la creazione di pacchetti
(defpackage "CTR"
(:use "COMMON-LISP")
(:export "COUNTER" "INCREMENT" "CLEAR"))
(in-package ctr)
;function definitions here
Tuttavia, in Peter Seibels Practical Common Lisp, Link here, dice:
Poiché i pacchetti sono usati dal lettore, un pacchetto deve essere definito prima di poter caricare o in fase di compilazione FILE un file che contiene un in-package espressione di passare a quel pacchetto. I pacchetti devono essere definiti anche prima che altri moduli DEFPACKAGE possano riferirsi a loro ... Il primo passo per assicurarsi che i pacchetti esistano quando hanno bisogno di consiste nel mettere tutti i tuoi DEFPACKAGE in file separati dal codice che deve essere letto in quei pacchetti
Quindi lui consiglia di creare due file per ogni pacchetto, uno per il pacchetto e uno per il codice. I file contenenti defpackages dovrebbero iniziare con (in-package "COMMON-LISP-USER").
Per me sembra che mettere il defpackage nello stesso file, prima del pacchetto e del codice, sia un buon modo per garantire che il pacchetto sia definito prima dell'uso. Quindi il primo metodo, raccogliere tutto in un unico file sembra più facile. Ci sono problemi con l'utilizzo di questo metodo per la creazione del pacchetto?
Penso che l'ordine sia la ragione più importante di questi, e ce n'è un'altra: i pacchetti divisi su più file. –
Sono d'accordo con te, tranne nel caso di progetti a file singolo, in cui puoi inserire la definizione del pacchetto nello stesso file. AFAIK, non è proibito dallo standard. –
Più file e ordini quando si usa ASDF ha senso. I primi due punti sembrano più una preferenza individuale. – snowape