6
Common Lispには、deftypeで作成した型の定義を解除する機能がありますか?Common Lispで型を削除する
私はそれについてHyperspecに何も見つかりませんでした。
私はちょうどunintern
派生型指定子です
Common Lispには、deftypeで作成した型の定義を解除する機能がありますか?Common Lispで型を削除する
私はそれについてHyperspecに何も見つかりませんでした。
私はちょうどunintern
派生型指定子です
:あなたには、いくつかの理由のタイプのすべてのトレースを削除することについて本当に心配している場合
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]
また、あなたはいつもに実装依存のコードを書くことができますそのような機能が標準で言及されていなくても、それを達成する。例えば、CCLで(テストされていない、私はちょうど、関連するコードを脱脂):
(defun delete-type (derived-type-specifier)
(ccl::clear-type-cache)
(remhash derived-type-specifier ccl::%deftype-expanders%)
(setf (documentation derived-type-specifier 'type) nil))
そして、ここで行く:
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]