% Function DELETE-PACKAGE
Function DELETE-PACKAGE
delete-package
package => generalized-boolean
package - パッケージ指定子
generalized-boolean - generalized-boolean
delete-package
はpackageを
全てのパッケージシステムのデータ構造から削除します。
もし操作が成功したとき、delete-package
はtrueを、
それ以外はnil
を返却します。
delete-package
の効果は、
packageの名前とニックネームが
認識されたパッケージの名前ではなくなるというものです。
そのパッケージオブジェクトは、まだパッケージです
(例えばpackagep
はtrueになります)が、
package-name
はnil
を返却します。
COMMON-LISP
パッケージかKEYWORD
パッケージを削除した結果は未定義です。
いったん削除されたpackageに対して
他のパッケージの操作を行った結果は未定義です。
とくに削除されたpackageを*package*
に束縛したときか、
あるいは削除されたpackageを引数に指定したときに、
find-symbol
やintern
や、
パッケージからシンボル名を探すような他の関数によって
実行されたときの結果は未定義です。
もしpackageがすでに削除されたパッケージオブジェクトであったときは、
delete-package
は即座にnil
を返却します。
この操作が完了したあと、 前のホームパッケージがpackageであったシンボルの ホームパッケージは実装依存です。 例外として、package内のアクセス可能なシンボルは、 ホームパッケージがpackageではないシンボルは変更されません。
(setq *foo-package* (make-package "FOO" :use nil))
(setq *foo-symbol* (intern "FOO" *foo-package*))
(export *foo-symbol* *foo-package*)
(setq *bar-package* (make-package "BAR" :use '("FOO")))
(setq *bar-symbol* (intern "BAR" *bar-package*))
(export *foo-symbol* *bar-package*)
(export *bar-symbol* *bar-package*)
(setq *baz-package* (make-package "BAZ" :use '("BAR")))
(symbol-package *foo-symbol*) => #<PACKAGE "FOO">
(symbol-package *bar-symbol*) => #<PACKAGE "BAR">
(prin1-to-string *foo-symbol*) => "FOO:FOO"
(prin1-to-string *bar-symbol*) => "BAR:BAR"
(find-symbol "FOO" *bar-package*) => FOO:FOO, :EXTERNAL
(find-symbol "FOO" *baz-package*) => FOO:FOO, :INHERITED
(find-symbol "BAR" *baz-package*) => BAR:BAR, :INHERITED
(packagep *foo-package*) => true
(packagep *bar-package*) => true
(packagep *baz-package*) => true
(package-name *foo-package*) => "FOO"
(package-name *bar-package*) => "BAR"
(package-name *baz-package*) => "BAZ"
(package-use-list *foo-package*) => ()
(package-use-list *bar-package*) => (#<PACKAGE "FOO">)
(package-use-list *baz-package*) => (#<PACKAGE "BAR">)
(package-used-by-list *foo-package*) => (#<PACKAGE "BAR">)
(package-used-by-list *bar-package*) => (#<PACKAGE "BAZ">)
(package-used-by-list *baz-package*) => ()
(delete-package *bar-package*)
>> Error: Package BAZ uses package BAR.
>> If continued, BAZ will be made to unuse-package BAR,
>> and then BAR will be deleted.
>> Type :CONTINUE to continue.
>> Debug> :CONTINUE
=> T
(symbol-package *foo-symbol*) => #<PACKAGE "FOO">
(symbol-package *bar-symbol*) is unspecified
(prin1-to-string *foo-symbol*) => "FOO:FOO"
(prin1-to-string *bar-symbol*) is unspecified
(find-symbol "FOO" *bar-package*) is unspecified
(find-symbol "FOO" *baz-package*) => NIL, NIL
(find-symbol "BAR" *baz-package*) => NIL, NIL
(packagep *foo-package*) => T
(packagep *bar-package*) => T
(packagep *baz-package*) => T
(package-name *foo-package*) => "FOO"
(package-name *bar-package*) => NIL
(package-name *baz-package*) => "BAZ"
(package-use-list *foo-package*) => ()
(package-use-list *bar-package*) is unspecified
(package-use-list *baz-package*) => ()
(package-used-by-list *foo-package*) => ()
(package-used-by-list *bar-package*) is unspecified
(package-used-by-list *baz-package*) => ()
なし。
もしpackage指定子が現在有効な名前ではなかったとき、
修正可能な型program-error
のエラーが通知されます。
もし修正がされたとき、削除の処理は実施されず、
かわりにdelete-package
は即座にnil
を返却します。
もしpackageが他のパッケージに使われていたときは、
修正可能な型program-error
のエラーが通知されます。
もし修正がされたとき、
unuse-package
は効果的に呼ばれて
依存しているものを取り除き、
packageの外部シンボルは
packageを使っているそれらのパッケージで
アクセスできなくなります。
したがってdelete-package
は
ちょうどそれを使うパッケージが存在しなくなるかのように
packageを削除します。
なし。