delete-package (original) (raw)

ANSI Common Lisp 11 Packages 11.2 Dictionary of Packages

11.2.11 delete-package Function

Syntax:

delete-package package generalized-boolean

Arguments and Values:

package - a package designator.

generalized-boolean - a generalized boolean.

Description:

delete-package deletes package from all package system data structures. If the operation is successful, delete-package returns true, otherwise nil. The effect of delete-package is that the name and nicknames of package cease to be recognized package names. The package object is still a package(i.e., packagep is true of it) but package-name returns nil. The consequences of deleting the common-lisp package or the keyword package are undefined. The consequences of invoking any other package operation on _package_once it has been deleted are unspecified. In particular, the consequences of invoking find-symbol,intern and other functions that look for a symbol name in a package are unspecified if they are called with *package*bound to the deleted package or with the deleted _package_as an argument.

If package is a package object that has already been deleted, delete-package immediately returns nil.

After this operation completes, the _home package_of any symbol whose home packagehad previously been_package_isimplementation-dependent. Except for this, symbols accessiblein package are not modified in any other way;symbols whose home package is not package remain unchanged.

Examples:

(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) ()

Exceptional Situations:

If the package designator is a name that does not currently name a package, a correctable error of type package-error is signaled. If correction is attempted, no deletion action is attempted; instead, delete-package immediately returns nil.

If package is used by other packages, a correctable error of type package-error is signaled. If correction is attempted,unuse-package is effectively called to remove any dependencies, causing package's external symbols to cease being accessible to those packages that use package. delete-package then deletes package just as it would have had there been no packages that used it.

See Also:

unuse-package

Allegro CL Implementation Details:

None.