El siguiente ejemplo se da en Paul Graham ANSI Common Lisp como un ejemplo de hacer encapsulación:¿Es mejor poner el defpackage en un archivo separado al crear paquetes
(defpackage "CTR"
(:use "COMMON-LISP")
(:export "COUNTER" "INCREMENT" "CLEAR"))
(in-package ctr)
;function definitions here
Sin embargo, en Peter Seibels práctica Common Lisp, enlace here, dice:
Dado que los paquetes son utilizados por el lector, un paquete debe ser definido antes de poder cargar o compile-file un archivo que contiene un IN-pAQUETE expresión de cambiar a ese paquete. Los paquetes también se deben definir antes de que otros formularios DEFPACKAGE puedan referirse a ellos ... El mejor primer paso para asegurarse de que existan paquetes cuando necesitan es colocar todos sus DEFPACKAGE en archivos separados del código que necesita leer en esos paquetes
Por lo tanto, recomienda crear dos archivos para cada paquete, uno para el paquete de desempate y otro para el código. Los archivos que contienen defpackages deberían comenzar con (paquete "COMMON-LISP-USER").
Para mí, parece que colocar el desfmpage en el mismo archivo, antes del paquete y el código, es una buena forma de asegurarse de que el paquete esté definido antes de usarse. Entonces, el primer método, reunir todo en un archivo parece más fácil. ¿Hay algún problema con el uso de este método para la creación de paquetes?
Creo que el motivo de la orden es la razón más importante de esas, y hay otra: paquetes divididos en varios archivos. –
Estoy de acuerdo con usted, excepto en el caso de los proyectos de un solo archivo, donde puede poner la definición del paquete en el mismo archivo. AFAIK, no está prohibido por el estándar. –
Múltiples archivos y pedidos cuando se usa ASDF tiene sentido. Los primeros dos puntos parecen más como preferencia individual. – snowape