2012-07-05 14 views
5

Esta es la forma en que la exportación símbolos :bar y :baz del paquete foo:¿Cómo hacer que Lisp olvide los símbolos exportados previamente?

(in-package :cl-user) 
(defpackage foo 
    (:use :cl) 
    (:export :bar :baz)) 
(in-package :foo) 

Cuando quito :baz de la lista de símbolos exportados SBCL quejas y falla la compilación.

warning: 
    FOO also exports the following symbols: 
     (FOO:BAZ) 

¿Cómo puedo hacer SBCL hacer olvidar :baz sin recargar BABA?

Respuesta

10

SBCL:

* (apropos "unexport") 

UNEXPORT (fbound) 


* (documentation 'unexport 'function) 

"Makes SYMBOLS no longer exported from PACKAGE." 


* (apropos "unintern") 

UNINTERN (fbound) 


* (documentation 'unintern 'function) 

"Makes SYMBOL no longer present in PACKAGE. If SYMBOL was present then T is 
returned, otherwise NIL. If PACKAGE is SYMBOL's home package, then it is made 
uninterned." 
2

Hay un montón de documentación sobre estos temas, que se debe leer o releer. Este paquete/símbolo suena lo suficientemente trivial a primera vista, pero es lo suficientemente diferente de lo que hacen otros idiomas para que valga la pena leerlo (es decir, tratar de reutilizar el conocimiento de otros idiomas es particularmente riesgoso cuando se trata de paquetes y símbolos).

Si, después de leer los documentos, aún tiene problemas, intente volver a leerlos (la experiencia adquirida al tener problemas lo ayudará a enfocarse en las secciones relevantes; la relectura sin problemas entre lecturas no es muy productiva en mi humilde opinión).

Algunos enlaces he encontrado útil:

Cuestiones relacionadas