2012-09-01 18 views

उत्तर

5

मैं सिर्फ 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] 

इसके अलावा, अगर आप किसी कारण से प्रकार के हर ट्रेस हटाने के बारे में वास्तव में चिंतित हैं, तो आप हमेशा के लिए कार्यान्वयन पर निर्भर कोड लिख सकते हैं इसे प्राप्त करें, भले ही ऐसी कार्यक्षमता मानक में उल्लिखित न हो।

(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] 
उदाहरण के लिए, सीसीएल में (अपरीक्षित, मैं सिर्फ प्रासंगिक कोड स्किम्ड)