Function DELETE-PACKAGE

UP


Function DELETE-PACKAGE

Function DELETE-PACKAGE

構文

delete-package package => generalized-boolean

引数と戻り値

package - パッケージ指定子
generalized-boolean - generalized-boolean

定義

delete-packagepackageを 全てのパッケージシステムのデータ構造から削除します。 もし操作が成功したとき、delete-packagetrueを、 それ以外はnilを返却します。 delete-packageの効果は、 packageの名前とニックネームが 認識されたパッケージの名前ではなくなるというものです。 そのパッケージオブジェクトは、まだパッケージです (例えばpackageptrueになります)が、 package-namenilを返却します。 COMMON-LISPパッケージかKEYWORDパッケージを削除した結果は未定義です。 いったん削除されたpackageに対して 他のパッケージの操作を行った結果は未定義です。 とくに削除されたpackage*package*に束縛したときか、 あるいは削除されたpackageを引数に指定したときに、 find-symbolinternや、 パッケージからシンボル名を探すような他の関数によって 実行されたときの結果は未定義です。

もし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を削除します。

参考

unuse-package

備考

なし。


TOP, Github