Skip to main content

*package*

package∗ Variable

Value Type:

a package object.

Initial Value:

the COMMON-LISP-USER package.

Description:

Whatever package object is currently the value of *package* is referred to as the current package.

Examples:

(in-package "COMMON-LISP-USER") → #<PACKAGE "COMMON-LISP-USER"> 
\*package\* → #<PACKAGE "COMMON-LISP-USER">
(make-package "SAMPLE-PACKAGE" :use("COMMON-LISP"))
→ #<PACKAGE "SAMPLE-PACKAGE">
(list


(symbol-package
(let ((\*package\* (find-package ’sample-package)))
(setq \*some-symbol\* (read-from-string "just-testing"))))
\*package\*)
(#<PACKAGE "SAMPLE-PACKAGE"> #<PACKAGE "COMMON-LISP-USER">)
(list (symbol-package (read-from-string "just-testing"))
\*package\*)
(#<PACKAGE "COMMON-LISP-USER"> #<PACKAGE "COMMON-LISP-USER">)
(eq ’foo (intern "FOO")) → true
(eq ’foo (let ((\*package\* (find-package ’sample-package)))
(intern "FOO")))
→ false

Affected By:

load, compile-file, in-package

See Also:

compile-file, in-package, load, package

Expanded Reference: *package*

Basic Usage: Inspecting the Current Package

*package* holds the current package object. It determines where the reader interns new symbols.

*package*
;; ==> #<PACKAGE "COMMON-LISP-USER">

(package-name *package*)
;; => "COMMON-LISP-USER"

Changing the Current Package with in-package

(defpackage "PKG-VAR-DEMO" (:use "COMMON-LISP"))
(in-package "PKG-VAR-DEMO")

(package-name *package*)
;; => "PKG-VAR-DEMO"

(in-package "COMMON-LISP-USER")

Temporarily Binding *package* with let

You can dynamically bind *package* to control symbol lookup temporarily.

(defpackage "TEMP-BIND" (:use "COMMON-LISP"))

(let ((*package* (find-package "TEMP-BIND")))
(package-name *package*))
=> "TEMP-BIND"

;; Outside the let, *package* is unchanged
(package-name *package*)
;; => "COMMON-LISP-USER"

Effect on the Reader

The value of *package* affects where read and read-from-string intern symbols.

(defpackage "READ-DEMO" (:use "COMMON-LISP"))

(let ((*package* (find-package "READ-DEMO")))
(symbol-package (read-from-string "MY-SYM")))
==> #<PACKAGE "READ-DEMO">

(let ((*package* (find-package "COMMON-LISP-USER")))
(symbol-package (read-from-string "MY-SYM")))
==> #<PACKAGE "COMMON-LISP-USER">

Default Value

The initial value of *package* is the COMMON-LISP-USER package.

(eq *package* (find-package "COMMON-LISP-USER"))
;; => T ; in a fresh session