Bietet Common Lisp eine Möglichkeit zum Entsperren von Typen, die mit deftype erstellt wurden?Einen Typ in Common Lisp löschen
Ich habe nichts in der Hyperspec darüber gefunden.
Bietet Common Lisp eine Möglichkeit zum Entsperren von Typen, die mit deftype erstellt wurden?Einen Typ in Common Lisp löschen
Ich habe nichts in der Hyperspec darüber gefunden.
Ich würde nur unintern
die abgeleitete Typspezifizierer:
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]
Auch, wenn Sie wirklich besorgt um jede Spur von der Art, aus irgendeinem Grund zu löschen, können Sie immer abhängig von der Implementierung Code schreiben erreichen Sie es, auch wenn eine solche Funktionalität in der Norm nicht erwähnt wird. Zum Beispiel in CCL (ungetestet, ich abgeschöpft nur den entsprechenden Code):
(defun delete-type (derived-type-specifier)
(ccl::clear-type-cache)
(remhash derived-type-specifier ccl::%deftype-expanders%)
(setf (documentation derived-type-specifier 'type) nil))
Und hier gehen wir:
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]