¿Common Lisp ofrece una función para definir tipos creados con deftype?Eliminación de un tipo en Common Lisp
No he encontrado nada en el Hyperspec al respecto.
¿Common Lisp ofrece una función para definir tipos creados con deftype?Eliminación de un tipo en Common Lisp
No he encontrado nada en el Hyperspec al respecto.
me acaba de unintern
tipo derivado especificador:
T1> (deftype foo() 'fixnum)
FOO
T1> (let ((bar 1))
(check-type bar foo))
NIL
T1> (unintern 'foo)
T
T1> (let ((bar 1))
(check-type bar foo))
Unknown type specifier: FOO
[Condition of type SIMPLE-ERROR]
Además, si usted está realmente preocupado por la eliminación de todo rastro del tipo, por alguna razón, siempre se puede escribir código dependiente de la implementación de lograrlo, incluso si dicha funcionalidad no se menciona en la norma. Por ejemplo, en el CCL (no probado, sólo por encima el código correspondiente):
(defun delete-type (derived-type-specifier)
(ccl::clear-type-cache)
(remhash derived-type-specifier ccl::%deftype-expanders%)
(setf (documentation derived-type-specifier 'type) nil))
Y aquí vamos:
T1> (deftype foo() "frob" 'fixnum)
FOO
T1> (documentation 'foo 'type)
"frob"
T1> (let ((bar 1))
(check-type bar foo))
NIL
T1> (delete-type 'foo)
NIL
T1> (documentation 'foo 'type)
NIL
T1> (let ((bar 1))
(check-type bar foo))
Unknown type specifier: FOO
[Condition of type SIMPLE-ERROR]