defpackage
(defpackage name (:use package...) (:export symbol...) (:nicknames name...) (:import-from package symbol...))
Defines a new package named name and returns the name symbol. Like in-package, it is a literal, top-level directive consumed at read/compile time, so packages are defined in source order. The name and the clause arguments are keywords, bare symbols, strings, or uninterned symbols (:mypkg, mypkg, "mypkg", #:mypkg — the last is the portable defpackage idiom).
(:use package...)makes the external (exported) symbols of the listed packages visible unqualified. The used packages must already exist. Without a:useclause nothing is visible unqualified — write(:use :cl)to use the standard symbols without acl:prefix.common-lispandcommon-lisp-userare built-in nicknames forclandcl-user, so(:use #:common-lisp)works too.(:export symbol...)declares the package's external symbols: they are reachable asname:symbolfrom other packages, and inherited by packages that use this one. Symbols interned later (for exampledefuns made under(in-package name)that are not in the:exportclause) are internal and require the double colon,name::symbol.(:nicknames name...)registers alternate names for the package; a nickname resolves everywhere the canonical name does. A nickname that collides with an existing package (or nickname) is an error.(:import-from package symbol...)makes the named symbols ofpackagevisible unqualified without using the whole package. Resolution is textual: an imported name resolves to the source package's canonical spelling, so(:import-from #:common-lisp #:car)gives a use-nothing package justcar.(:documentation "...")and(:size n)are accepted and ignored.
Redefining an existing package is an error, and so are :shadow/:shadowing-import-from (rontolisp has no symbol shadowing) and any other clause (:intern, ...). See Packages for the full rules.