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*)
(package BAR.
>> Error: Package BAZ uses unuse-package BAR,
>> If continued, BAZ will be made to and then BAR will be deleted.
>> continue.
>> Type :CONTINUE to
>> 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を削除します。
なし。