Skip to main content

package-used-by-list

package-used-by-list Function

Syntax:

package-used-by-list package → used-by-list

Arguments and Values:

package—a package designator .

used-by-list—a list of package objects.

Description:

package-used-by-list returns a list of other packages that use package.

Examples:

(package-used-by-list (make-package ’temp))() 
(make-package ’trash :use(temp)) → #<PACKAGE "TRASH">
(package-used-by-list ’temp)(#<PACKAGE "TRASH">)

Exceptional Situations:

Should signal an error of type type-error if package is not a package.

See Also:

use-package, unuse-package

Expanded Reference: package-used-by-list

Basic Usage: Finding Which Packages Use a Given Package

package-used-by-list returns a list of packages that inherit from (use) the specified package.

(defpackage "FOUNDATION" (:use) (:export "CORE"))
(defpackage "APP-A" (:use "FOUNDATION"))
(defpackage "APP-B" (:use "FOUNDATION"))

(sort (mapcar #'package-name (package-used-by-list "FOUNDATION")) #'string<)
=> ("APP-A" "APP-B")

A Package Not Used by Anyone

(make-package "LONELY" :use '())
(package-used-by-list "LONELY")
=> ()

The COMMON-LISP Package Is Widely Used

;; COMMON-LISP is typically used by many packages
(not (null (package-used-by-list "COMMON-LISP")))
=> T

Relationship Between package-use-list and package-used-by-list

These two functions are inverses: if A uses B, then B is used-by A.

(defpackage "PROVIDER-X" (:use) (:export "SVC"))
(defpackage "CONSUMER-X" (:use "PROVIDER-X"))

(member (find-package "PROVIDER-X")
(package-use-list "CONSUMER-X"))
;; => (#<PACKAGE "PROVIDER-X">)

(member (find-package "CONSUMER-X")
(package-used-by-list "PROVIDER-X"))
;; => (#<PACKAGE "CONSUMER-X">)