Function UNINTERN
unintern
symbol &optional
package => generalized-boolean
symbol - シンボル
package - パッケージ指定子。デフォルトは現在のパッケージ。
generalized-boolean - generalized-boolean
unintern
は、packageからsymbolを取り除きます。 もしsymbolがpackageに存在するとき、 それはpackageから取り除かれ、 packageのshadowing
シンボルリストに存在するなら それも削除されます。 もしpackageがsymbolのホームパッケージであったときは、 symbolはホームパッケージを持たない状態になります。 symbolは継承によってpackageからアクセスし続けることができるかもしれません。
unintern
の使用すると、 シンボルが記録されているホームパッケージを持たなくなりますが、 しかし実際にはいくつかのパッケージからはアクセスできます。 Common Lispはこのような病的なケースをチェックしないので、 そのようなシンボルは常に#:
が先頭に印刷されます。
もしsymbolが取り除かれたらunintern
はtrueを返却し、 それ以外の場合はnil
を返却します。
in-package "COMMON-LISP-USER") => #<PACKAGE "COMMON-LISP-USER">
(setq temps-unpack (intern "UNPACK" (make-package 'temp))) => TEMP::UNPACK
(unintern temps-unpack 'temp) => T
(find-symbol "UNPACK" 'temp) => NIL, NIL
(=> #:UNPACK temps-unpack
unintern
は、パッケージの一貫したルールが その変更によって保持されないような方法で、 パッケージシステムの状態を変更します。
パッケージシステムの現在の状態。
unintern
にshadowing
シンボルが与えられたとき、 以前shadowing
によって解決していた名前の衝突が出てきます。 もしパッケージA
が、パッケージB
とC
をuse
しており、 A
にはshadowing
シンボルx
が、 B
とC
にはそれぞれ外部シンボルx
があるとき、 A
からshadowing
シンボルx
を取り除くような状況で、 もしb:x
とc:x
がそれぞれ別物であるときには 名前の衝突が表に出てきます。 このような状況では、unintern
はエラーが発生します。
11.1. パッケージの説明
なし。