% Function UNINTERN
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
temps-unpack => #: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. パッケージの説明
なし。