defpackage
(defpackage name (:use package...) (:export symbol...) (:nicknames name...) (:import-from package symbol...))
name という名前の新しいパッケージを定義し、名前のシンボルを返します。in-package と同様に、read/コンパイル時に消費されるリテラルなトップレベルディレクティブであり、パッケージはソース順に定義されます。名前と clause の引数はキーワード、裸のシンボル、文字列、または uninterned シンボルです(:mypkg、mypkg、"mypkg"、#:mypkg — 最後がポータブルな defpackage の慣用形です)。
(:use package...)は、列挙したパッケージの external(export 済み)シンボルを修飾なしで見えるようにします。使用するパッケージは先に存在していなければなりません。:useclause がない場合、修飾なしで見えるものは 何もありません — 標準シンボルをcl:プレフィックスなしで使うには(:use :cl)と書きます。common-lispとcommon-lisp-userはclとcl-userの組み込みニックネームなので、(:use #:common-lisp)も動作します。(:export symbol...)はパッケージの external シンボルを宣言します: 他のパッケージからname:symbolとして参照でき、このパッケージを使用するパッケージに継承されます。後から intern されるシンボル(例えば(in-package name)の下で定義され:exportclause に含まれないdefun)は internal であり、ダブルコロンname::symbolが必要です。(:nicknames name...)はパッケージの別名を登録します。ニックネームは正規名が解決されるすべての場所で解決されます。既存のパッケージ(またはニックネーム)と衝突するニックネームはエラーです。(:import-from package symbol...)は、パッケージ全体を use せずにpackageの指定シンボルだけを修飾なしで見えるようにします。解決はテキストベースです: import された名前はソースパッケージの正規表記に解決されるので、(:import-from #:common-lisp #:car)は何も use しないパッケージにcarだけを与えます。(:documentation "...")と(:size n)は受理されますが無視されます。
既存パッケージの再定義はエラーで、:shadow/:shadowing-import-from(rontolisp にシンボルのシャドウイングはありません)およびその他の clause(:intern など)もエラーです。完全なルールはパッケージを参照してください。