12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708 |
- @node Packages, Numbers (Numbers), Symbols, Top
- @chapter Packages
- @menu
- * Package Concepts::
- * Packages Dictionary::
- @end menu
- @node Package Concepts, Packages Dictionary, Packages, Packages
- @section Package Concepts
- @c including concept-packages
- @menu
- * Introduction to Packages::
- * Standardized Packages::
- @end menu
- @node Introduction to Packages, Standardized Packages, Package Concepts, Package Concepts
- @subsection Introduction to Packages
- A @i{package}
- @IGindex{package}
- establishes a mapping from names to @i{symbols}.
- At any given time, one @i{package} is current.
- The @i{current package}
- @IGindex{current package}
- is the one that is the @i{value} of @b{*package*}.
- When using the @i{Lisp reader},
- it is possible to refer to @i{symbols} in @i{packages}
- other than the current one through the use of @i{package prefixes} in the
- printed representation of the @i{symbol}.
- Figure 11--1 lists some @i{defined names} that are applicable
- to @i{packages}.
- Where an @i{operator}
- takes an argument that is either a @i{symbol} or a @i{list}
- of @i{symbols},
- an argument of @b{nil} is treated as an empty @i{list} of @i{symbols}.
- Any @i{package} argument may be either a @i{string}, a @i{symbol}, or
- a @i{package}. If a @i{symbol} is supplied, its name will be used
- as the @i{package} name.
- @group
- @noindent
- @w{ *modules* import provide }
- @w{ *package* in-package rename-package }
- @w{ defpackage intern require }
- @w{ do-all-symbols list-all-packages shadow }
- @w{ do-external-symbols make-package shadowing-import }
- @w{ do-symbols package-name unexport }
- @w{ export package-nicknames unintern }
- @w{ find-all-symbols package-shadowing-symbols unuse-package }
- @w{ find-package package-use-list use-package }
- @w{ find-symbol package-used-by-list }
- @noindent
- @w{ Figure 11--1: Some Defined Names related to Packages }
- @end group
- @menu
- * Package Names and Nicknames::
- * Symbols in a Package::
- * Internal and External Symbols::
- * Package Inheritance::
- * Accessibility of Symbols in a Package::
- * Locating a Symbol in a Package::
- * Prevention of Name Conflicts in Packages::
- @end menu
- @node Package Names and Nicknames, Symbols in a Package, Introduction to Packages, Introduction to Packages
- @subsubsection Package Names and Nicknames
- Each @i{package} has a @i{name} (a @i{string}) and perhaps some @i{nicknames}
- (also @i{strings}).
- These are assigned when the @i{package} is created and can be changed later.
- There is a single namespace for @i{packages}.
- The @i{function} @b{find-package} translates a package
- @i{name} or @i{nickname} into the associated @i{package}.
- The @i{function} @b{package-name} returns the @i{name} of a @i{package}.
- The @i{function} @b{package-nicknames} returns
- a @i{list} of all @i{nicknames} for a @i{package}.
- @b{rename-package} removes a @i{package}'s
- current @i{name} and @i{nicknames} and replaces them with new ones
- specified by the caller.
- @node Symbols in a Package, Internal and External Symbols, Package Names and Nicknames, Introduction to Packages
- @subsubsection Symbols in a Package
- @node Internal and External Symbols, Package Inheritance, Symbols in a Package, Introduction to Packages
- @subsubsection Internal and External Symbols
- The mappings in a @i{package} are divided into two classes, external and internal.
- The @i{symbols} targeted by these different mappings
- are called @i{external symbols} and @i{internal symbols}
- @IGindex{internal symbol}
- of the
- @i{package}. Within a @i{package}, a name refers to one
- @i{symbol} or to none; if it does refer
- to a @i{symbol}, then it is either external or internal in that
- @i{package}, but not both.
- @i{External symbols}
- @IGindex{external symbol}
- are part of the package's public interface to other @i{packages}.
- @i{Symbols} become @i{external symbols} of a given
- @i{package} if they have been @i{exported} from that @i{package}.
- A @i{symbol} has the same @i{name} no matter what @i{package}
- it is @i{present} in, but it might be an @i{external symbol} of some @i{packages}
- and an @i{internal symbol} of others.
- @node Package Inheritance, Accessibility of Symbols in a Package, Internal and External Symbols, Introduction to Packages
- @subsubsection Package Inheritance
- @i{Packages} can be built up in layers. From one point of view,
- a @i{package} is a single collection
- of mappings from @i{strings} into @i{internal symbols} and
- @i{external symbols}.
- However, some of these mappings might be established within the @i{package}
- itself, while other mappings are inherited from other @i{packages}
- via @b{use-package}.
- A @i{symbol} is said to be @i{present}
- @IGindex{present}
- in a @i{package}
- if the mapping is in the @i{package} itself and is
- not inherited from somewhere else.
- There is no way to inherit the @i{internal symbols} of another @i{package};
- to refer to an @i{internal symbol} using the @i{Lisp reader},
- a @i{package} containing the @i{symbol}
- must be made to be the @i{current package},
- a @i{package prefix} must be used,
- or the @i{symbol} must be @i{imported} into the @i{current package}.
- @node Accessibility of Symbols in a Package, Locating a Symbol in a Package, Package Inheritance, Introduction to Packages
- @subsubsection Accessibility of Symbols in a Package
- A @i{symbol} becomes @i{accessible}
- @IGindex{accessible}
- in a @i{package}
- if that is its @i{home package} when it is created,
- or if it is @i{imported} into that @i{package},
- or by inheritance via @b{use-package}.
- If a @i{symbol} is @i{accessible} in a @i{package},
- it can be referred to when using the @i{Lisp reader}
- without a @i{package prefix} when that @i{package} is the @i{current package},
- regardless of whether it is @i{present} or inherited.
- @i{Symbols} from one @i{package} can be made @i{accessible}
- in another @i{package} in two ways.
- @table @asis
- @item --
- Any individual @i{symbol} can be added to a @i{package} by use
- of @b{import}. After the call to @b{import} the
- @i{symbol} is @i{present} in the importing @i{package}.
- The status of the @i{symbol} in the @i{package}
- it came from (if any) is unchanged, and the @i{home package} for
- this @i{symbol} is unchanged.
- Once @i{imported}, a @i{symbol} is @i{present} in the
- importing @i{package}
- and can be removed only by calling @b{unintern}.
- A @i{symbol} is @i{shadowed}_3 by another @i{symbol}
- in some @i{package} if the first @i{symbol} would be @i{accessible}
- by inheritance if not for the presence of the second @i{symbol}.
- See @b{shadowing-import}.
- @item --
- The second mechanism for making @i{symbols} from one @i{package}
- @i{accessible} in another is provided by @b{use-package}.
- All of the @i{external symbols} of the used @i{package} are inherited
- by the using @i{package}.
- The @i{function} @b{unuse-package} undoes the effects of a previous @b{use-package}.
- @end table
- @node Locating a Symbol in a Package, Prevention of Name Conflicts in Packages, Accessibility of Symbols in a Package, Introduction to Packages
- @subsubsection Locating a Symbol in a Package
- When a @i{symbol} is to be located in a given @i{package}
- the following occurs:
- @table @asis
- @item --
- The @i{external symbols} and @i{internal symbols} of the
- @i{package} are searched for the @i{symbol}.
- @item --
- The @i{external symbols} of the used @i{packages} are
- searched
- in some unspecified order. The
- order does not matter; see the rules for handling name
- conflicts listed below.
- @end table
- @node Prevention of Name Conflicts in Packages, , Locating a Symbol in a Package, Introduction to Packages
- @subsubsection Prevention of Name Conflicts in Packages
- Within one @i{package}, any particular name can refer to at most one
- @i{symbol}. A name conflict is said to occur when there would be more than
- one candidate @i{symbol}. Any time a name conflict is about to occur,
- a @i{correctable} @i{error} is signaled.
- The following rules apply to name conflicts:
- @table @asis
- @item --
- Name conflicts are detected when they become possible, that is, when the
- package structure is altered. Name
- conflicts are not checked during every name lookup.
- @item --
- If the @i{same} @i{symbol} is @i{accessible} to a @i{package}
- through more than one path, there is no name conflict.
- A @i{symbol} cannot conflict with itself.
- Name conflicts occur only between @i{distinct} @i{symbols} with
- the same name (under @b{string=}).
- @item --
- Every @i{package} has a list of shadowing @i{symbols}.
- A shadowing @i{symbol} takes precedence over any other @i{symbol} of
- the same name that would otherwise be @i{accessible} in the @i{package}.
- A name conflict involving a shadowing symbol is always resolved in favor of
- the shadowing @i{symbol}, without signaling an error (except for one
- exception involving @b{import}).
- See @b{shadow} and @b{shadowing-import}.
- @item --
- The functions @b{use-package}, @b{import}, and
- @b{export} check for name conflicts.
- @item --
- @b{shadow} and @b{shadowing-import}
- never signal a name-conflict error.
- @item --
- @b{unuse-package} and @b{unexport}
- do not need to do any name-conflict checking.
- @b{unintern} does name-conflict checking only when a @i{symbol}
- being @i{uninterned} is a @i{shadowing symbol}
- @IGindex{shadowing symbol}
- .
- @item --
- Giving a shadowing symbol to @b{unintern}
- can uncover a name conflict that had
- previously been resolved by the shadowing.
- @item --
- Package functions signal name-conflict errors of @i{type} @b{package-error} before making any
- change to the package structure. When multiple changes are to be made,
- it is
- permissible for the implementation to process each change separately.
- For example, when @b{export} is given a
- @i{list} of
- @i{symbols},
- aborting from a name
- conflict caused by the second @i{symbol}
- in the @i{list} might still export the
- first @i{symbol} in the @i{list}.
- However, a name-conflict error caused by @b{export}
- of a single @i{symbol} will be signaled before
- that @i{symbol}'s @i{accessibility} in any @i{package} is changed.
- @item --
- Continuing from a name-conflict error must offer the user a chance to
- resolve the name conflict in favor of either of the candidates. The
- @i{package}
- structure should be altered to reflect the resolution of the
- name conflict, via @b{shadowing-import},
- @b{unintern},
- or @b{unexport}.
- @item --
- A name conflict in @b{use-package} between a @i{symbol}
- @i{present} in the using @i{package} and an @i{external symbol} of the used
- @i{package} is resolved in favor of the first @i{symbol} by making it a
- shadowing @i{symbol}, or in favor of the second @i{symbol} by uninterning
- the first @i{symbol} from the using @i{package}.
- @item --
- A name conflict in @b{export} or @b{unintern}
- due to a @i{package}'s inheriting two @i{distinct} @i{symbols}
- with the @i{same} @i{name} (under @b{string=})
- from two other @i{packages} can be resolved in
- favor of either @i{symbol} by importing it into the using
- @i{package} and making it a @i{shadowing symbol}
- @IGindex{shadowing symbol}
- ,
- just as with @b{use-package}.
- @end table
- @node Standardized Packages, , Introduction to Packages, Package Concepts
- @subsection Standardized Packages
- This section describes the @i{packages} that are available
- in every @i{conforming implementation}. A summary of the
- @i{names} and @i{nicknames} of those @i{standardized} @i{packages}
- is given in Figure 11--2.
- @group
- @noindent
- @w{ Name Nicknames }
- @w{ @t{COMMON-LISP} @t{CL} }
- @w{ @t{COMMON-LISP-USER} @t{CL-USER} }
- @w{ @t{KEYWORD} @i{none} }
- @noindent
- @w{ Figure 11--2: Standardized Package Names}
- @end group
- @menu
- * The COMMON-LISP Package::
- * Constraints on the COMMON-LISP Package for Conforming Implementations::
- * Constraints on the COMMON-LISP Package for Conforming Programs::
- * Some Exceptions to Constraints on the COMMON-LISP Package for Conforming Programs::
- * The COMMON-LISP-USER Package::
- * The KEYWORD Package::
- * Interning a Symbol in the KEYWORD Package::
- * Notes about The KEYWORD Package::
- * Implementation-Defined Packages::
- @end menu
- @node The COMMON-LISP Package, Constraints on the COMMON-LISP Package for Conforming Implementations, Standardized Packages, Standardized Packages
- @subsubsection The COMMON-LISP Package
- @IPindex{common-lisp}
- @IPindex{cl}
- The @t{COMMON-LISP} @i{package} contains the primitives of the @r{Common Lisp} system as
- defined by this specification. Its @i{external} @i{symbols} include
- all of the @i{defined names} (except for @i{defined names} in
- the @t{KEYWORD} @i{package}) that are present in the @r{Common Lisp} system,
- such as @b{car}, @b{cdr}, @b{*package*}, etc.
- The @t{COMMON-LISP} @i{package} has the @i{nickname} @t{CL}.
- The @t{COMMON-LISP} @i{package} has as @i{external} @i{symbols} those
- symbols enumerated in the figures in @ref{Symbols in the COMMON-LISP Package}, and no others.
- These @i{external} @i{symbols} are @i{present} in the @t{COMMON-LISP} @i{package}
- but their @i{home package} need not be the @t{COMMON-LISP} @i{package}.
- For example, the symbol @t{HELP} cannot be an @i{external symbol} of
- the @t{COMMON-LISP} @i{package} because it is not mentioned in @ref{Symbols in the COMMON-LISP Package}.
- In contrast, the @i{symbol} @b{variable}
- must be an @i{external symbol} of the @t{COMMON-LISP} @i{package}
- even though it has no definition
- because it is listed in that section
- (to support its use as a valid second @i{argument} to the @i{function} @b{documentation}).
- The @t{COMMON-LISP} @i{package} can have additional @i{internal symbols}.
- @node Constraints on the COMMON-LISP Package for Conforming Implementations, Constraints on the COMMON-LISP Package for Conforming Programs, The COMMON-LISP Package, Standardized Packages
- @subsubsection Constraints on the COMMON-LISP Package for Conforming Implementations
- In a @i{conforming implementation},
- an @i{external} @i{symbol} of the @t{COMMON-LISP} @i{package} can have
- a @i{function}, @i{macro}, or @i{special operator} definition,
- a @i{global variable} definition
- (or other status as a @i{dynamic variable}
- due to a @b{special} @i{proclamation}),
- or a @i{type} definition
- only if explicitly permitted in this standard.
- For example,
- @b{fboundp} @i{yields} @i{false}
- for any @i{external symbol} of the @t{COMMON-LISP} @i{package}
- that is not the @i{name} of a @i{standardized}
- @i{function}, @i{macro} or @i{special operator},
- and
- @b{boundp} returns @i{false}
- for any @i{external symbol} of the @t{COMMON-LISP} @i{package}
- that is not the @i{name} of a @i{standardized} @i{global variable}.
- It also follows that
- @i{conforming programs} can use @i{external symbols} of the @t{COMMON-LISP} @i{package}
- as the @i{names} of local @i{lexical variables}
- with confidence that those @i{names} have not been @i{proclaimed} @b{special}
- by the @i{implementation}
- unless those @i{symbols} are
- @i{names} of @i{standardized} @i{global variables}.
- A @i{conforming implementation} must not place any @i{property} on
- an @i{external symbol} of the @t{COMMON-LISP} @i{package} using a @i{property indicator}
- that is either an @i{external symbol} of any @i{standardized} @i{package}
- or a @i{symbol} that is otherwise @i{accessible} in the @t{COMMON-LISP-USER} @i{package}.
- @node Constraints on the COMMON-LISP Package for Conforming Programs, Some Exceptions to Constraints on the COMMON-LISP Package for Conforming Programs, Constraints on the COMMON-LISP Package for Conforming Implementations, Standardized Packages
- @subsubsection Constraints on the COMMON-LISP Package for Conforming Programs
- @ITindex{redefinition}
- Except where explicitly allowed, the consequences are undefined if any
- of the following actions are performed on an @i{external symbol}
- of the @t{COMMON-LISP} @i{package}:
- @table @asis
- @item 1.
- @i{Binding} or altering its value (lexically or dynamically).
- (Some exceptions are noted below.)
- @item 2.
- Defining,
- undefining,
- or @i{binding} it as a @i{function}.
- (Some exceptions are noted below.)
- @item 3.
- Defining,
- undefining,
- or @i{binding} it as a @i{macro}
- or @i{compiler macro}.
- (Some exceptions are noted below.)
- @item 4.
- Defining it as a @i{type specifier}
- (via @b{defstruct},
- @b{defclass},
- @b{deftype},
- @b{define-condition}).
- @item 5.
- Defining it as a structure (via @b{defstruct}).
- @item 6.
- Defining it as a @i{declaration}
- with a @b{declaration} @i{proclamation}.
- @item 7.
- Defining it as a @i{symbol macro}.
- @item 8.
- Altering its @i{home package}.
- @item 9.
- Tracing it (via @b{trace}).
- @item 10.
- Declaring or proclaiming it
- @b{special}
- (via @b{declare},
- @b{declaim},
- or @b{proclaim}).
- @item 11.
- Declaring or proclaiming its @b{type} or @b{ftype}
- (via @b{declare},
- @b{declaim},
- or @b{proclaim}).
- (Some exceptions are noted below.)
- @item 12.
- Removing it from the @t{COMMON-LISP} @i{package}.
- @item 13.
- Defining a @i{setf expander} for it
- (via @b{defsetf} or @b{define-setf-method}).
- @item 14.
- Defining, undefining, or binding its @i{setf function name}.
- @item 15.
- Defining it as a @i{method combination} type
- (via @b{define-method-combination}).
- @item 16.
- Using it as the class-name argument
- to @b{setf} of @b{find-class}.
- @item 17.
- Binding it as a @i{catch tag}.
- @item 18.
- Binding it as a @i{restart} @i{name}.
- @item 19.
- Defining a @i{method}
- for a @i{standardized} @i{generic function}
- which is @i{applicable} when all of the @i{arguments}
- are @i{direct instances} of @i{standardized} @i{classes}.
- @end table
- @node Some Exceptions to Constraints on the COMMON-LISP Package for Conforming Programs, The COMMON-LISP-USER Package, Constraints on the COMMON-LISP Package for Conforming Programs, Standardized Packages
- @subsubsection Some Exceptions to Constraints on the COMMON-LISP Package for Conforming Programs
- If an @i{external symbol} of the @t{COMMON-LISP} @i{package}
- is not globally defined as a @i{standardized} @i{dynamic variable}
- or @i{constant variable},
- it is allowed to lexically @i{bind} it
- and to declare the @b{type} of that @i{binding},
- and
- it is allowed to locally @i{establish} it as a @i{symbol macro}
- (@i{e.g.}, with @b{symbol-macrolet}).
- Unless explicitly specified otherwise,
- if an @i{external symbol} of the @t{COMMON-LISP} @i{package}
- is globally defined as a @i{standardized} @i{dynamic variable},
- it is permitted to @i{bind} or @i{assign} that @i{dynamic variable}
- provided that the ``Value Type'' constraints on the @i{dynamic variable}
- are maintained, and that the new @i{value} of the @i{variable}
- is consistent with the stated purpose of the @i{variable}.
- If an @i{external symbol} of the @t{COMMON-LISP} @i{package} is not defined
- as a @i{standardized} @i{function}, @i{macro}, or @i{special operator},
- it is allowed to lexically @i{bind} it as a @i{function} (@i{e.g.}, with @b{flet}),
- to declare the @b{ftype} of that @i{binding},
- and
- (in @i{implementations} which provide the ability to do so)
- to @b{trace} that @i{binding}.
- If an @i{external symbol} of the @t{COMMON-LISP} @i{package} is not defined
- as a @i{standardized} @i{function}, @i{macro}, or @i{special operator},
- it is allowed to lexically @i{bind} it as a @i{macro} (@i{e.g.}, with @b{macrolet}).
- If an @i{external symbol} of the @t{COMMON-LISP} @i{package} is not defined
- as a @i{standardized} @i{function}, @i{macro}, or @i{special operator},
- it is allowed to lexically @i{bind} its @i{setf function name}
- as a @i{function},
- and to declare the @b{ftype} of that @i{binding}.
- @node The COMMON-LISP-USER Package, The KEYWORD Package, Some Exceptions to Constraints on the COMMON-LISP Package for Conforming Programs, Standardized Packages
- @subsubsection The COMMON-LISP-USER Package
- @IPindex{common-lisp-user}
- @IPindex{cl-user}
- The @t{COMMON-LISP-USER} @i{package} is the @i{current package} when
- a @r{Common Lisp} system starts up. This @i{package} @i{uses} the @t{COMMON-LISP} @i{package}.
- The @t{COMMON-LISP-USER} @i{package} has the @i{nickname} @t{CL-USER}.
- The @t{COMMON-LISP-USER} @i{package} can have additional @i{symbols} @i{interned} within it;
- it can @i{use} other @i{implementation-defined} @i{packages}.
- @node The KEYWORD Package, Interning a Symbol in the KEYWORD Package, The COMMON-LISP-USER Package, Standardized Packages
- @subsubsection The KEYWORD Package
- @IPindex{keyword}
- The @t{KEYWORD} @i{package} contains @i{symbols}, called @i{keywords}_1,
- that are typically used as special markers in @i{programs}
- and their associated data @i{expressions}_1.
- @i{Symbol} @i{tokens} that start with a @i{package marker}
- are parsed by the @i{Lisp reader} as @i{symbols}
- in the @t{KEYWORD} @i{package}; see @ref{Symbols as Tokens}.
- This makes it notationally convenient to use @i{keywords}
- when communicating between programs in different @i{packages}.
- For example, the mechanism for passing @i{keyword parameters} in a @i{call} uses
- @i{keywords}_1 to name the corresponding @i{arguments};
- see @ref{Ordinary Lambda Lists}.
- @i{Symbols} in the @t{KEYWORD} @i{package} are, by definition, of @i{type} @b{keyword}.
- @node Interning a Symbol in the KEYWORD Package, Notes about The KEYWORD Package, The KEYWORD Package, Standardized Packages
- @subsubsection Interning a Symbol in the KEYWORD Package
- The @t{KEYWORD} @i{package} is treated differently than other @i{packages}
- in that special actions are taken when a @i{symbol} is @i{interned} in it.
- In particular, when a @i{symbol} is @i{interned} in the @t{KEYWORD} @i{package},
- it is automatically made to be an @i{external symbol}
- and is automatically made to be a @i{constant variable} with itself as a @i{value}.
- @node Notes about The KEYWORD Package, Implementation-Defined Packages, Interning a Symbol in the KEYWORD Package, Standardized Packages
- @subsubsection Notes about The KEYWORD Package
- It is generally best to confine the use of @i{keywords} to situations in which
- there are a finitely enumerable set of names to be selected between. For example,
- if there were two states of a light switch, they might be called @t{:on} and @t{:off}.
- In situations where the set of names is not finitely enumerable
- (@i{i.e.}, where name conflicts might arise)
- it is frequently best to use @i{symbols} in some @i{package}
- other than @t{KEYWORD} so that conflicts will be naturally avoided.
- For example, it is generally not wise for a @i{program} to use a @i{keyword}_1
- as a @i{property indicator}, since if there were ever another @i{program}
- that did the same thing, each would clobber the other's data.
- @node Implementation-Defined Packages, , Notes about The KEYWORD Package, Standardized Packages
- @subsubsection Implementation-Defined Packages
- Other, @i{implementation-defined} @i{packages} might be present
- in the initial @r{Common Lisp} environment.
- It is recommended, but not required, that the documentation for a
- @i{conforming implementation} contain a full list of all @i{package} names
- initially present in that @i{implementation} but not specified in this specification.
- (See also the @i{function} @b{list-all-packages}.)
- @c end of including concept-packages
- @node Packages Dictionary, , Package Concepts, Packages
- @section Packages Dictionary
- @c including dict-packages
- @menu
- * package::
- * export::
- * find-symbol::
- * find-package::
- * find-all-symbols::
- * import::
- * list-all-packages::
- * rename-package::
- * shadow::
- * shadowing-import::
- * delete-package::
- * make-package::
- * with-package-iterator::
- * unexport::
- * unintern::
- * in-package::
- * unuse-package::
- * use-package::
- * defpackage::
- * do-symbols::
- * intern::
- * package-name::
- * package-nicknames::
- * package-shadowing-symbols::
- * package-use-list::
- * package-used-by-list::
- * packagep::
- * *package*::
- * package-error::
- * package-error-package::
- @end menu
- @node package, export, Packages Dictionary, Packages Dictionary
- @subsection package [System Class]
- @subsubheading Class Precedence List::
- @b{package},
- @b{t}
- @subsubheading Description::
- A @i{package} is a @i{namespace} that maps @i{symbol} @i{names}
- to @i{symbols}; see @ref{Package Concepts}.
- @subsubheading See Also::
- @ref{Package Concepts},
- @ref{Printing Other Objects},
- @ref{Symbols as Tokens}
- @node export, find-symbol, package, Packages Dictionary
- @subsection export [Function]
- @code{export} @i{symbols {&optional} package} @result{} @i{@b{t}}
- @subsubheading Arguments and Values::
- @i{symbols}---a @i{designator} for a @i{list} of @i{symbols}.
- @i{package}---a @i{package designator}.
- The default is the @i{current package}.
- @subsubheading Description::
- @b{export} makes one or more @i{symbols} that are @i{accessible}
- in @i{package} (whether directly or by inheritance) be @i{external symbols}
- of that @i{package}.
- If any of the @i{symbols} is already @i{accessible} as
- an @i{external symbol} of @i{package},
- @b{export} has no effect on that @i{symbol}.
- If the @i{symbol} is
- @i{present} in @i{package}
- as an internal symbol, it is simply changed to external status.
- If it is @i{accessible} as an @i{internal symbol} via @b{use-package},
- it
- is first @i{imported} into @i{package},
- then @i{exported}.
- (The @i{symbol} is then @i{present} in the @i{package}
- whether or not @i{package} continues to use the @i{package} through
- which the @i{symbol} was originally inherited.)
- @b{export} makes
- each @i{symbol}
- @i{accessible} to all the @i{packages} that use @i{package}.
- All of these @i{packages} are checked for name conflicts:
- @t{(export @i{s} @i{p})} does
- @t{(find-symbol (symbol-name @i{s}) @i{q})} for each package @i{q}
- in @t{(package-used-by-list @i{p})}. Note that in the usual case of
- an @b{export} during the initial definition of a @i{package},
- the
- result of @b{package-used-by-list}
- is @b{nil} and the name-conflict checking
- takes negligible time.
- When multiple changes are to be made,
- for example when @b{export}
- is given a @i{list} of @i{symbols}, it is
- permissible for the implementation to process each change separately,
- so that aborting from a name
- conflict caused by any but the first @i{symbol} in the
- @i{list} does not unexport the
- first @i{symbol} in the @i{list}.
- However, aborting from a name-conflict error
- caused by @b{export}
- of one of @i{symbols} does not leave that @i{symbol}
- @i{accessible}
- to some @i{packages}
- and @i{inaccessible} to others; with respect to
- each of @i{symbols} processed, @b{export}
- behaves as if it were as an atomic operation.
- A name conflict in @b{export} between one of
- @i{symbols} being exported and a
- @i{symbol} already @i{present} in a @i{package}
- that would inherit the
- newly-exported @i{symbol}
- may be resolved in favor of the exported @i{symbol}
- by uninterning the other one, or in favor of the already-present
- @i{symbol} by making it a shadowing symbol.
- @subsubheading Examples::
- @example
- (make-package 'temp :use nil) @result{} #<PACKAGE "TEMP">
- (use-package 'temp) @result{} T
- (intern "TEMP-SYM" 'temp) @result{} TEMP::TEMP-SYM, NIL
- (find-symbol "TEMP-SYM") @result{} NIL, NIL
- (export (find-symbol "TEMP-SYM" 'temp) 'temp) @result{} T
- (find-symbol "TEMP-SYM") @result{} TEMP-SYM, :INHERITED
- @end example
- @subsubheading Side Effects::
- The package system is modified.
- @subsubheading Affected By::
- @i{Accessible} @i{symbols}.
- @subsubheading Exceptional Situations::
- If any of the @i{symbols} is not @i{accessible} at all in @i{package},
- an error of @i{type} @b{package-error} is signaled that is @i{correctable}
- by permitting the @i{user}
- to interactively specify whether that @i{symbol} should be @i{imported}.
- @subsubheading See Also::
- @ref{import}
- ,
- @ref{unexport}
- ,
- @ref{Package Concepts}
- @node find-symbol, find-package, export, Packages Dictionary
- @subsection find-symbol [Function]
- @code{find-symbol} @i{string {&optional} package} @result{} @i{symbol, status}
- @subsubheading Arguments and Values::
- @i{string}---a @i{string}.
- @i{package}---a @i{package designator}.
- The default is the @i{current package}.
- @i{symbol}---a @i{symbol} accessible in the @i{package},
- or @b{nil}.
- @i{status}---one of @t{:inherited}, @t{:external}, @t{:internal}, or @b{nil}.
- @subsubheading Description::
- @b{find-symbol} locates a @i{symbol} whose @i{name} is
- @i{string} in a @i{package}.
- If a @i{symbol} named @i{string} is found in @i{package},
- directly or by inheritance, the @i{symbol}
- found is returned as the first
- value; the second value is as follows:
- @table @asis
- @item @t{:internal}
- If the @i{symbol} is @i{present} in @i{package}
- as an @i{internal symbol}.
- @item @t{:external}
- If the @i{symbol} is @i{present} in @i{package}
- as an @i{external symbol}.
- @item @t{:inherited}
- If the @i{symbol} is inherited by @i{package}
- through @b{use-package},
- but is not @i{present} in @i{package}.
- @end table
- If no such @i{symbol} is @i{accessible} in @i{package},
- both values are @b{nil}.
- @subsubheading Examples::
- @example
- (find-symbol "NEVER-BEFORE-USED") @result{} NIL, NIL
- (find-symbol "NEVER-BEFORE-USED") @result{} NIL, NIL
- (intern "NEVER-BEFORE-USED") @result{} NEVER-BEFORE-USED, NIL
- (intern "NEVER-BEFORE-USED") @result{} NEVER-BEFORE-USED, :INTERNAL
- (find-symbol "NEVER-BEFORE-USED") @result{} NEVER-BEFORE-USED, :INTERNAL
- (find-symbol "never-before-used") @result{} NIL, NIL
- (find-symbol "CAR" 'common-lisp-user) @result{} CAR, :INHERITED
- (find-symbol "CAR" 'common-lisp) @result{} CAR, :EXTERNAL
- (find-symbol "NIL" 'common-lisp-user) @result{} NIL, :INHERITED
- (find-symbol "NIL" 'common-lisp) @result{} NIL, :EXTERNAL
- (find-symbol "NIL" (prog1 (make-package "JUST-TESTING" :use '())
- (intern "NIL" "JUST-TESTING")))
- @result{} JUST-TESTING::NIL, :INTERNAL
- (export 'just-testing::nil 'just-testing)
- (find-symbol "NIL" 'just-testing) @result{} JUST-TESTING:NIL, :EXTERNAL
- (find-symbol "NIL" "KEYWORD")
- @result{} NIL, NIL
- @i{OR}@result{} :NIL, :EXTERNAL
- (find-symbol (symbol-name :nil) "KEYWORD") @result{} :NIL, :EXTERNAL
- @end example
- @subsubheading Affected By::
- @b{intern},
- @b{import},
- @b{export},
- @b{use-package},
- @b{unintern},
- @b{unexport},
- @b{unuse-package}
- @subsubheading See Also::
- @ref{intern}
- ,
- @ref{find-all-symbols}
- @subsubheading Notes::
- @b{find-symbol} is operationally equivalent to @b{intern},
- except that it never creates a new @i{symbol}.
- @node find-package, find-all-symbols, find-symbol, Packages Dictionary
- @subsection find-package [Function]
- @code{find-package} @i{name} @result{} @i{package}
- @subsubheading Arguments and Values::
- @i{name}---a @i{string designator} or a @i{package} @i{object}.
- @i{package}---a @i{package} @i{object} or @b{nil}.
- @subsubheading Description::
- If @i{name} is a @i{string designator},
- @b{find-package} locates and returns the
- @i{package} whose name or nickname is @i{name}.
- This
- search is case sensitive.
- If there is no such @i{package},
- @b{find-package} returns @b{nil}.
- If @i{name} is a @i{package} @i{object},
- that @i{package} @i{object} is returned.
- @subsubheading Examples::
- @example
- (find-package 'common-lisp) @result{} #<PACKAGE "COMMON-LISP">
- (find-package "COMMON-LISP-USER") @result{} #<PACKAGE "COMMON-LISP-USER">
- (find-package 'not-there) @result{} NIL
- @end example
- @subsubheading Affected By::
- The set of @i{packages} created by the @i{implementation}.
- @b{defpackage},
- @b{delete-package},
- @b{make-package},
- @b{rename-package}
- @subsubheading See Also::
- @ref{make-package}
- @node find-all-symbols, import, find-package, Packages Dictionary
- @subsection find-all-symbols [Function]
- @code{find-all-symbols} @i{string} @result{} @i{symbols}
- @subsubheading Arguments and Values::
- @i{string}---a @i{string designator}.
- @i{symbols}---a @i{list} of @i{symbols}.
- @subsubheading Description::
- @b{find-all-symbols} searches
- every @i{registered package}
- for @i{symbols} that have a
- @i{name} that is the @i{same} (under @b{string=}) as
- @i{string}. A @i{list} of all such @i{symbols} is returned.
- Whether or how the @i{list} is ordered is
- @i{implementation-dependent}.
- @subsubheading Examples::
- @example
- (find-all-symbols 'car)
- @result{} (CAR)
- @i{OR}@result{} (CAR VEHICLES:CAR)
- @i{OR}@result{} (VEHICLES:CAR CAR)
- (intern "CAR" (make-package 'temp :use nil)) @result{} TEMP::CAR, NIL
- (find-all-symbols 'car)
- @result{} (TEMP::CAR CAR)
- @i{OR}@result{} (CAR TEMP::CAR)
- @i{OR}@result{} (TEMP::CAR CAR VEHICLES:CAR)
- @i{OR}@result{} (CAR TEMP::CAR VEHICLES:CAR)
- @end example
- @subsubheading See Also::
- @ref{find-symbol}
- @node import, list-all-packages, find-all-symbols, Packages Dictionary
- @subsection import [Function]
- @code{import} @i{symbols {&optional} package} @result{} @i{@b{t}}
- @subsubheading Arguments and Values::
- @i{symbols}---a @i{designator} for a @i{list} of @i{symbols}.
- @i{package}---a @i{package designator}.
- The default is the @i{current package}.
- @subsubheading Description::
- @b{import} adds @i{symbol} or
- @i{symbols} to the internals of @i{package}, checking for name
- conflicts with existing @i{symbols} either @i{present} in @i{package}
- or @i{accessible} to it. Once the @i{symbols} have been
- @i{imported}, they may be referenced in the @i{importing}
- @i{package} without the use of a @i{package prefix} when using the @i{Lisp reader}.
- A name conflict in @b{import} between the
- @i{symbol} being imported and a symbol inherited from some other @i{package} can
- be resolved in favor of the
- @i{symbol} being @i{imported}
- by making it a shadowing symbol, or in favor
- of the @i{symbol} already @i{accessible} by
- not doing the @b{import}. A
- name conflict in @b{import} with a @i{symbol}
- already @i{present} in the
- @i{package}
- may be resolved by uninterning that @i{symbol}, or by not
- doing the @b{import}.
- The imported @i{symbol} is
- not automatically exported from the @i{current package}, but if it is
- already @i{present} and external, then the fact that it
- is external is not changed.
- If any @i{symbol} to be @i{imported} has no home
- package (@i{i.e.}, @t{(symbol-package @i{symbol}) @result{} nil}),
- @b{import} sets the @i{home package}
- of the @i{symbol} to @i{package}.
- If the @i{symbol} is already @i{present} in the importing @i{package},
- @b{import} has no effect.
- @subsubheading Examples::
- @example
- (import 'common-lisp::car (make-package 'temp :use nil)) @result{} T
- (find-symbol "CAR" 'temp) @result{} CAR, :INTERNAL
- (find-symbol "CDR" 'temp) @result{} NIL, NIL
- @end example
- The form @t{(import 'editor:buffer)} takes the external symbol named
- @t{buffer} in the @t{EDITOR} @i{package} (this symbol was located when the form
- was read by the @i{Lisp reader}) and adds it to the @i{current package}
- as an @i{internal symbol}. The symbol @t{buffer} is then @i{present} in
- the @i{current package}.
- @subsubheading Side Effects::
- The package system is modified.
- @subsubheading Affected By::
- Current state of the package system.
- @subsubheading Exceptional Situations::
- @b{import} signals a @i{correctable} error of @i{type} @b{package-error}
- if any of the @i{symbols} to be @i{imported} has the @i{same} @i{name}
- (under @b{string=}) as some distinct @i{symbol} (under @b{eql})
- already @i{accessible} in the @i{package}, even if the conflict is
- with a @i{shadowing symbol} of the @i{package}.
- @subsubheading See Also::
- @ref{shadow}
- ,
- @ref{export}
- @node list-all-packages, rename-package, import, Packages Dictionary
- @subsection list-all-packages [Function]
- @code{list-all-packages} @i{<@i{no @i{arguments}}>} @result{} @i{packages}
- @subsubheading Arguments and Values::
- @i{packages}---a @i{list} of @i{package} @i{objects}.
- @subsubheading Description::
- @b{list-all-packages} returns a
- @i{fresh}
- @i{list} of
- all @i{registered packages}.
- @subsubheading Examples::
- @example
- (let ((before (list-all-packages)))
- (make-package 'temp)
- (set-difference (list-all-packages) before)) @result{} (#<PACKAGE "TEMP">)
- @end example
- @subsubheading Affected By::
- @b{defpackage},
- @b{delete-package},
- @b{make-package}
- @node rename-package, shadow, list-all-packages, Packages Dictionary
- @subsection rename-package [Function]
- @code{rename-package} @i{package new-name {&optional} new-nicknames} @result{} @i{package-object}
- @subsubheading Arguments and Values::
- @i{package}---a @i{package designator}.
- @i{new-name}---a @i{package designator}.
- @i{new-nicknames}---a @i{list} of @i{string designators}.
- The default is the @i{empty list}.
- @i{package-object}---the renamed @i{package} @i{object}.
- @subsubheading Description::
- Replaces the name and nicknames of @i{package}.
- The old name and all of the old nicknames of @i{package} are eliminated
- and are replaced by @i{new-name} and @i{new-nicknames}.
- The consequences are undefined if @i{new-name} or any @i{new-nickname}
- conflicts with any existing package names.
- @subsubheading Examples::
- @example
- (make-package 'temporary :nicknames '("TEMP")) @result{} #<PACKAGE "TEMPORARY">
- (rename-package 'temp 'ephemeral) @result{} #<PACKAGE "EPHEMERAL">
- (package-nicknames (find-package 'ephemeral)) @result{} ()
- (find-package 'temporary) @result{} NIL
- (rename-package 'ephemeral 'temporary '(temp fleeting))
- @result{} #<PACKAGE "TEMPORARY">
- (package-nicknames (find-package 'temp)) @result{} ("TEMP" "FLEETING")
- @end example
- @subsubheading See Also::
- @ref{make-package}
- @node shadow, shadowing-import, rename-package, Packages Dictionary
- @subsection shadow [Function]
- @code{shadow} @i{symbol-names {&optional} package} @result{} @i{@b{t}}
- @subsubheading Arguments and Values::
- @i{symbol-names}---a @i{designator} for
- a @i{list} of @i{string designators}.
- @i{package}---a @i{package designator}.
- The default is the @i{current package}.
- @subsubheading Description::
- @b{shadow} assures that @i{symbols} with names given
- by @i{symbol-names} are @i{present}
- in
- the @i{package}.
- Specifically, @i{package} is searched for @i{symbols}
- with the @i{names} supplied by @i{symbol-names}.
- For each such @i{name}, if a corresponding @i{symbol}
- is not @i{present} in @i{package} (directly, not by inheritance),
- then a corresponding @i{symbol} is created with that @i{name},
- and inserted into @i{package} as an @i{internal symbol}.
- The corresponding @i{symbol}, whether pre-existing or newly created,
- is then added, if not already present, to the @i{shadowing symbols list}
- of @i{package}.
- @subsubheading Examples::
- @example
- (package-shadowing-symbols (make-package 'temp)) @result{} NIL
- (find-symbol 'car 'temp) @result{} CAR, :INHERITED
- (shadow 'car 'temp) @result{} T
- (find-symbol 'car 'temp) @result{} TEMP::CAR, :INTERNAL
- (package-shadowing-symbols 'temp) @result{} (TEMP::CAR)
- @end example
- @example
- (make-package 'test-1) @result{} #<PACKAGE "TEST-1">
- (intern "TEST" (find-package 'test-1)) @result{} TEST-1::TEST, NIL
- (shadow 'test-1::test (find-package 'test-1)) @result{} T
- (shadow 'TEST (find-package 'test-1)) @result{} T
- (assert (not (null (member 'test-1::test (package-shadowing-symbols
- (find-package 'test-1))))))
- (make-package 'test-2) @result{} #<PACKAGE "TEST-2">
- (intern "TEST" (find-package 'test-2)) @result{} TEST-2::TEST, NIL
- (export 'test-2::test (find-package 'test-2)) @result{} T
- (use-package 'test-2 (find-package 'test-1)) ;should not error
- @end example
- @subsubheading Side Effects::
- @b{shadow} changes the state of the package system in such a
- way that the package consistency rules do not hold across the change.
- @subsubheading Affected By::
- Current state of the package system.
- @subsubheading See Also::
- @ref{package-shadowing-symbols}
- ,
- @ref{Package Concepts}
- @subsubheading Notes::
- If a @i{symbol} with a name in @i{symbol-names} already exists
- in @i{package}, but by inheritance, the inherited symbol becomes
- @i{shadowed}_3 by a newly created @i{internal symbol}.
- @node shadowing-import, delete-package, shadow, Packages Dictionary
- @subsection shadowing-import [Function]
- @code{shadowing-import} @i{symbols {&optional} package} @result{} @i{@b{t}}
- @subsubheading Arguments and Values::
- @i{symbols}---a @i{designator} for a @i{list} of @i{symbols}.
- @i{package} ---a @i{package designator}.
- The default is the @i{current package}.
- @subsubheading Description::
- @b{shadowing-import} is like @b{import},
- but it does not signal an error even if the importation of a @i{symbol}
- would shadow some @i{symbol} already @i{accessible} in @i{package}.
- @b{shadowing-import} inserts each of @i{symbols}
- into @i{package} as an internal symbol, regardless
- of whether another @i{symbol} of the same name is shadowed by this
- action.
- If a different @i{symbol} of the same name is already @i{present}
- in @i{package},
- that @i{symbol} is first @i{uninterned} from @i{package}.
- The new @i{symbol} is added to @i{package}'s shadowing-symbols list.
- @b{shadowing-import} does name-conflict
- checking to the extent that it checks whether a distinct existing
- @i{symbol} with the same name is @i{accessible}; if so, it is shadowed by
- the new @i{symbol}, which implies that it must be uninterned
- if it was
- @i{present} in @i{package}.
- @subsubheading Examples::
- @example
- (in-package "COMMON-LISP-USER") @result{} #<PACKAGE "COMMON-LISP-USER">
- (setq sym (intern "CONFLICT")) @result{} CONFLICT
- (intern "CONFLICT" (make-package 'temp)) @result{} TEMP::CONFLICT, NIL
- (package-shadowing-symbols 'temp) @result{} NIL
- (shadowing-import sym 'temp) @result{} T
- (package-shadowing-symbols 'temp) @result{} (CONFLICT)
- @end example
- @subsubheading Side Effects::
- @b{shadowing-import}
- changes the state of the package system in such a way that
- the consistency rules do not hold across the change.
- @i{package}'s shadowing-symbols list is modified.
- @subsubheading Affected By::
- Current state of the package system.
- @subsubheading See Also::
- @ref{import}
- ,
- @ref{unintern}
- ,
- @ref{package-shadowing-symbols}
- @node delete-package, make-package, shadowing-import, Packages Dictionary
- @subsection delete-package [Function]
- @code{delete-package} @i{package} @result{} @i{generalized-boolean}
- @subsubheading Arguments and Values::
- @i{package}---a @i{package designator}.
- @i{generalized-boolean}---a @i{generalized boolean}.
- @subsubheading Description::
- @b{delete-package} deletes @i{package} from all package system
- data structures.
- If the operation is successful, @b{delete-package} returns
- true, otherwise @b{nil}.
- The effect of @b{delete-package} is that the name and nicknames
- of @i{package} cease to be recognized package names.
- The package @i{object} is still a @i{package}
- (@i{i.e.}, @b{packagep} is @i{true} of it)
- but @b{package-name} returns @b{nil}.
- The consequences of deleting the @t{COMMON-LISP} @i{package} or the @t{KEYWORD} @i{package} are undefined.
- The consequences of invoking any other package operation on @i{package}
- once it has been deleted are unspecified.
- In particular, the consequences of invoking @b{find-symbol},
- @b{intern} and other functions that look for a symbol name in
- a @i{package} are unspecified if they are called with @b{*package*}
- bound to the deleted @i{package} or with the deleted @i{package}
- as an argument.
- If @i{package} is a @i{package} @i{object} that has already
- been deleted, @b{delete-package} immediately returns @b{nil}.
- After this operation completes, the
- @i{home package}
- of any @i{symbol} whose @i{home package}
- had previously been
- @i{package}
- is
- @i{implementation-dependent}.
- Except for this, @i{symbols} @i{accessible}
- in @i{package} are not modified in any other way;
- @i{symbols} whose @i{home package} is not @i{package} remain unchanged.
- @subsubheading Examples::
- @example
- (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*) @result{} #<PACKAGE "FOO">
- (symbol-package *bar-symbol*) @result{} #<PACKAGE "BAR">
- (prin1-to-string *foo-symbol*) @result{} "FOO:FOO"
- (prin1-to-string *bar-symbol*) @result{} "BAR:BAR"
- (find-symbol "FOO" *bar-package*) @result{} FOO:FOO, :EXTERNAL
- (find-symbol "FOO" *baz-package*) @result{} FOO:FOO, :INHERITED
- (find-symbol "BAR" *baz-package*) @result{} BAR:BAR, :INHERITED
- (packagep *foo-package*) @result{} @i{true}
- (packagep *bar-package*) @result{} @i{true}
- (packagep *baz-package*) @result{} @i{true}
- (package-name *foo-package*) @result{} "FOO"
- (package-name *bar-package*) @result{} "BAR"
- (package-name *baz-package*) @result{} "BAZ"
- (package-use-list *foo-package*) @result{} ()
- (package-use-list *bar-package*) @result{} (#<PACKAGE "FOO">)
- (package-use-list *baz-package*) @result{} (#<PACKAGE "BAR">)
- (package-used-by-list *foo-package*) @result{} (#<PACKAGE "BAR">)
- (package-used-by-list *bar-package*) @result{} (#<PACKAGE "BAZ">)
- (package-used-by-list *baz-package*) @result{} ()
- (delete-package *bar-package*)
- @t{ |> } Error: Package BAZ uses package BAR.
- @t{ |> } If continued, BAZ will be made to unuse-package BAR,
- @t{ |> } and then BAR will be deleted.
- @t{ |> } Type :CONTINUE to continue.
- @t{ |> } Debug> @b{|>>}@t{:CONTINUE}@b{<<|}
- @result{} T
- (symbol-package *foo-symbol*) @result{} #<PACKAGE "FOO">
- (symbol-package *bar-symbol*) is unspecified
- (prin1-to-string *foo-symbol*) @result{} "FOO:FOO"
- (prin1-to-string *bar-symbol*) is unspecified
- (find-symbol "FOO" *bar-package*) is unspecified
- (find-symbol "FOO" *baz-package*) @result{} NIL, NIL
- (find-symbol "BAR" *baz-package*) @result{} NIL, NIL
- (packagep *foo-package*) @result{} T
- (packagep *bar-package*) @result{} T
- (packagep *baz-package*) @result{} T
- (package-name *foo-package*) @result{} "FOO"
- (package-name *bar-package*) @result{} NIL
- (package-name *baz-package*) @result{} "BAZ"
- (package-use-list *foo-package*) @result{} ()
- (package-use-list *bar-package*) is unspecified
- (package-use-list *baz-package*) @result{} ()
- (package-used-by-list *foo-package*) @result{} ()
- (package-used-by-list *bar-package*) is unspecified
- (package-used-by-list *baz-package*) @result{} ()
- @end example
- @subsubheading Exceptional Situations::
- If the @i{package} @i{designator} is a @i{name} that does not
- currently name a @i{package},
- a @i{correctable} error of @i{type} @b{package-error} is signaled.
- If correction is attempted, no deletion action is attempted;
- instead, @b{delete-package} immediately returns @b{nil}.
- If @i{package} is used by other @i{packages},
- a @i{correctable} error of @i{type} @b{package-error} is signaled.
- If correction is attempted,
- @b{unuse-package} is effectively called to remove any dependencies,
- causing @i{package}'s @i{external symbols} to cease being @i{accessible} to those
- @i{packages} that use @i{package}.
- @b{delete-package} then deletes @i{package} just as it would have had
- there been no @i{packages} that used it.
- @subsubheading See Also::
- @ref{unuse-package}
- @node make-package, with-package-iterator, delete-package, Packages Dictionary
- @subsection make-package [Function]
- @code{make-package} @i{package-name {&key} nicknames use} @result{} @i{package}
- @subsubheading Arguments and Values::
- @i{package-name}---a @i{string designator}.
- @i{nicknames}---a @i{list} of @i{string designators}.
- The default is the @i{empty list}.
- @i{use}---
- a @i{list} of @i{package designators}.
- The default is @i{implementation-defined}.
- @i{package}---a @i{package}.
- @subsubheading Description::
- Creates a new @i{package} with the name @i{package-name}.
- @i{Nicknames} are additional @i{names} which may be used
- to refer to the new @i{package}.
- @i{use} specifies zero or more @i{packages}
- the @i{external symbols} of which are to be inherited by
- the new @i{package}. See the @i{function} @b{use-package}.
- @subsubheading Examples::
- @example
- (make-package 'temporary :nicknames '("TEMP" "temp")) @result{} #<PACKAGE "TEMPORARY">
- (make-package "OWNER" :use '("temp")) @result{} #<PACKAGE "OWNER">
- (package-used-by-list 'temp) @result{} (#<PACKAGE "OWNER">)
- (package-use-list 'owner) @result{} (#<PACKAGE "TEMPORARY">)
- @end example
- @subsubheading Affected By::
- The existence of other @i{packages} in the system.
- @subsubheading Exceptional Situations::
- The consequences are unspecified if @i{packages} denoted by @i{use}
- do not exist.
- A @i{correctable} error is signaled if the @i{package-name}
- or any of the @i{nicknames} is already
- the @i{name} or @i{nickname} of an existing @i{package}.
- @subsubheading See Also::
- @ref{defpackage}
- ,
- @ref{use-package}
- @subsubheading Notes::
- In situations where the @i{packages} to be used contain symbols which would conflict,
- it is necessary to first create the package with @t{:use '()},
- then to use @b{shadow} or @b{shadowing-import} to address the conflicts,
- and then after that to use @b{use-package} once the conflicts have been addressed.
- When packages are being created as part of the static definition of a program
- rather than dynamically by the program, it is generally considered more stylistically
- appropriate to use @b{defpackage} rather than @b{make-package}.
- @node with-package-iterator, unexport, make-package, Packages Dictionary
- @subsection with-package-iterator [Macro]
- @code{with-package-iterator} @i{@r{(}name package-list-form {&rest} {symbol-types}@r{)}
- @{@i{declaration}@}{*} @{@i{form}@}{*}}@*
- @result{} @i{@{@i{result}@}{*}}
- @subsubheading Arguments and Values::
- @i{name}---a @i{symbol}.
- @i{package-list-form}---a @i{form}; evaluated once to produce a @i{package-list}.
- @i{package-list}---a @i{designator} for a list of @i{package designators}.
- @i{symbol-type}---one of the @i{symbols}
- @t{:internal}, @t{:external}, or @t{:inherited}.
- @i{declaration}---a @b{declare} @i{expression}; not evaluated.
- @i{forms}---an @i{implicit progn}.
- @i{results}---the @i{values} of the @i{forms}.
- @subsubheading Description::
- Within the lexical scope of the body @i{forms},
- the @i{name} is defined via @b{macrolet}
- such that successive invocations of @t{(@i{name})}
- will return the @i{symbols}, one by one,
- from the @i{packages} in @i{package-list}.
- It is unspecified whether @i{symbols} inherited from
- multiple @i{packages} are returned more than once.
- The order of @i{symbols} returned does not necessarily reflect the order
- of @i{packages} in @i{package-list}. When @i{package-list} has
- more than one element, it is unspecified whether duplicate @i{symbols} are
- returned once or more than once.
- @i{Symbol-types} controls which @i{symbols} that are @i{accessible}
- in a @i{package} are returned as follows:
- @table @asis
- @item @t{:internal}
- The @i{symbols} that are @i{present} in the @i{package},
- but that are not @i{exported}.
- @item @t{:external}
- The @i{symbols} that are @i{present} in the @i{package}
- and are @i{exported}.
- @item @t{:inherited}
- The @i{symbols} that are @i{exported} by used @i{packages}
- and that are not @i{shadowed}.
- @end table
- When more than one argument is supplied for @i{symbol-types},
- a @i{symbol} is returned if its @i{accessibility} matches
- any one of the @i{symbol-types} supplied.
- Implementations may extend this syntax by recognizing additional
- symbol accessibility types.
- An invocation of @t{(@i{name})} returns four values as follows:
- @table @asis
- @item 1.
- A flag that indicates whether a @i{symbol} is returned
- (true means that a @i{symbol} is returned).
- @item 2.
- A @i{symbol} that is @i{accessible} in one the
- indicated @i{packages}.
- @item 3.
- The accessibility type for that @i{symbol};
- @i{i.e.}, one of the symbols @t{:internal}, @t{:external}, or @t{:inherited}.
- @item 4.
- The @i{package} from which the @i{symbol} was obtained.
- The @i{package} is one of the @i{packages} present
- or named in @i{package-list}.
- @end table
- After all @i{symbols} have been returned by successive invocations of
- @t{(@i{name})}, then only one value is returned, namely @b{nil}.
- The meaning of the second, third, and fourth @i{values} is that the returned
- @i{symbol} is @i{accessible} in the returned @i{package}
- in the way indicated by the second return value as follows:
- @table @asis
- @item @t{:internal}
- Means @i{present} and not @i{exported}.
- @item @t{:external}
- Means @i{present} and @i{exported}.
- @item @t{:inherited}
- Means not @i{present} (thus not @i{shadowed}) but inherited
- from some used @i{package}.
- @end table
- It is unspecified what happens if any of the implicit interior state
- of an iteration is returned outside the dynamic extent of the
- @b{with-package-iterator}
- form such as by returning some @i{closure} over the invocation @i{form}.
- Any number of invocations of @b{with-package-iterator}
- can be nested, and the body of the innermost one can invoke all of the
- locally @i{established} @i{macros}, provided all those @i{macros}
- have distinct names.
- @subsubheading Examples::
- The following function should return @b{t} on any @i{package}, and signal
- an error if the usage of @b{with-package-iterator} does not agree
- with the corresponding usage of @b{do-symbols}.
- @example
- (defun test-package-iterator (package)
- (unless (packagep package)
- (setq package (find-package package)))
- (let ((all-entries '())
- (generated-entries '()))
- (do-symbols (x package)
- (multiple-value-bind (symbol accessibility)
- (find-symbol (symbol-name x) package)
- (push (list symbol accessibility) all-entries)))
- (with-package-iterator (generator-fn package
- :internal :external :inherited)
- (loop
- (multiple-value-bind (more? symbol accessibility pkg)
- (generator-fn)
- (unless more? (return))
- (let ((l (multiple-value-list (find-symbol (symbol-name symbol)
- package))))
- (unless (equal l (list symbol accessibility))
- (error "Symbol ~S not found as ~S in package ~A [~S]"
- symbol accessibility (package-name package) l))
- (push l generated-entries)))))
- (unless (and (subsetp all-entries generated-entries :test #'equal)
- (subsetp generated-entries all-entries :test #'equal))
- (error "Generated entries and Do-Symbols entries don't correspond"))
- t))
- @end example
- The following function prints out every @i{present} @i{symbol}
- (possibly more than once):
- @example
- (defun print-all-symbols ()
- (with-package-iterator (next-symbol (list-all-packages)
- :internal :external)
- (loop
- (multiple-value-bind (more? symbol) (next-symbol)
- (if more?
- (print symbol)
- (return))))))
- @end example
- @subsubheading Exceptional Situations::
- @b{with-package-iterator} signals an error of @i{type} @b{program-error} if
- no @i{symbol-types} are supplied or if a @i{symbol-type} is not
- recognized by the implementation is supplied.
- The consequences are undefined if the local function named @i{name}
- @i{established} by @b{with-package-iterator} is called after it
- has returned @i{false} as its @i{primary value}.
- @subsubheading See Also::
- @ref{Traversal Rules and Side Effects}
- @node unexport, unintern, with-package-iterator, Packages Dictionary
- @subsection unexport [Function]
- @code{unexport} @i{symbols {&optional} package} @result{} @i{@b{t}}
- @subsubheading Arguments and Values::
- @i{symbols}---a @i{designator} for a @i{list} of @i{symbols}.
- @i{package}---a @i{package designator}.
- The default is the @i{current package}.
- @subsubheading Description::
- @b{unexport} reverts external @i{symbols} in @i{package} to
- internal status; it undoes the effect of @b{export}.
- @b{unexport} works only on @i{symbols}
- @i{present}
- in @i{package}, switching them back to internal status.
- If @b{unexport} is given a @i{symbol} that is
- already @i{accessible} as an @i{internal symbol} in @i{package},
- it does nothing.
- @subsubheading Examples::
- @example
- (in-package "COMMON-LISP-USER") @result{} #<PACKAGE "COMMON-LISP-USER">
- (export (intern "CONTRABAND" (make-package 'temp)) 'temp) @result{} T
- (find-symbol "CONTRABAND") @result{} NIL, NIL
- (use-package 'temp) @result{} T
- (find-symbol "CONTRABAND") @result{} CONTRABAND, :INHERITED
- (unexport 'contraband 'temp) @result{} T
- (find-symbol "CONTRABAND") @result{} NIL, NIL
- @end example
- @subsubheading Side Effects::
- Package system is modified.
- @subsubheading Affected By::
- Current state of the package system.
- @subsubheading Exceptional Situations::
- If @b{unexport} is given a @i{symbol}
- not @i{accessible} in @i{package} at all,
- an error of @i{type} @b{package-error} is signaled.
- The consequences are undefined if @i{package} is the @t{KEYWORD} @i{package}
- or the @t{COMMON-LISP} @i{package}.
- @subsubheading See Also::
- @ref{export}
- , @ref{Package Concepts}
- @node unintern, in-package, unexport, Packages Dictionary
- @subsection unintern [Function]
- @code{unintern} @i{symbol {&optional} package} @result{} @i{generalized-boolean}
- @subsubheading Arguments and Values::
- @i{symbol}---a @i{symbol}.
- @i{package}---a @i{package designator}.
- The default is the @i{current package}.
- @i{generalized-boolean}---a @i{generalized boolean}.
- @subsubheading Description::
- @b{unintern} removes @i{symbol} from @i{package}.
- If @i{symbol} is @i{present} in @i{package}, it is
- removed from @i{package} and also from @i{package}'s
- @i{shadowing symbols list} if it is present there. If @i{package} is the
- @i{home package} for @i{symbol}, @i{symbol} is made to have no
- @i{home package}.
- @i{Symbol} may continue to be @i{accessible}
- in @i{package} by inheritance.
- Use of @b{unintern} can result in a @i{symbol}
- that has no
- recorded @i{home package},
- but that in fact is @i{accessible} in some @i{package}.
- @r{Common Lisp} does not check for this pathological case,
- and such @i{symbols}
- are always printed preceded by @t{#:}.
- @b{unintern} returns @i{true} if it removes @i{symbol}, and @b{nil} otherwise.
- @subsubheading Examples::
- @example
- (in-package "COMMON-LISP-USER") @result{} #<PACKAGE "COMMON-LISP-USER">
- (setq temps-unpack (intern "UNPACK" (make-package 'temp))) @result{} TEMP::UNPACK
- (unintern temps-unpack 'temp) @result{} T
- (find-symbol "UNPACK" 'temp) @result{} NIL, NIL
- temps-unpack @result{} #:UNPACK
- @end example
- @subsubheading Side Effects::
- @b{unintern} changes the state of the
- package system in such a way that the consistency rules do not hold
- across the change.
- @subsubheading Affected By::
- Current state of the package system.
- @subsubheading Exceptional Situations::
- Giving a shadowing symbol to @b{unintern}
- can uncover a name conflict that had
- previously been resolved by the shadowing. If package A uses packages
- B and C, A contains a shadowing symbol @t{x}, and B and C each contain external
- symbols named @t{x}, then removing the shadowing symbol @t{x}
- from A will reveal a name
- conflict between @t{b:x} and @t{c:x} if those two @i{symbols} are distinct.
- In this case @b{unintern} will signal an error.
- @subsubheading See Also::
- @ref{Package Concepts}
- @node in-package, unuse-package, unintern, Packages Dictionary
- @subsection in-package [Macro]
- @code{in-package} @i{name} @result{} @i{package}
- @subsubheading Arguments and Values::
- @i{name}---a @i{string designator}; not evaluated.
- @i{package}---the @i{package} named by @i{name}.
- @subsubheading Description::
- Causes the the @i{package} named by @i{name}
- to become the @i{current package}---that is, the @i{value} of @b{*package*}.
- If no such @i{package} already exists, an error of @i{type} @b{package-error} is signaled.
- Everything @b{in-package} does is also performed at compile time
- if the call appears as a @i{top level form}.
- @subsubheading Side Effects::
- The @i{variable} @b{*package*} is assigned.
- If the @b{in-package} @i{form} is a @i{top level form},
- this assignment also occurs at compile time.
- @subsubheading Exceptional Situations::
- An error of @i{type} @b{package-error} is signaled if the specified @i{package} does not exist.
- @subsubheading See Also::
- @ref{package}
- @node unuse-package, use-package, in-package, Packages Dictionary
- @subsection unuse-package [Function]
- @code{unuse-package} @i{packages-to-unuse {&optional} package} @result{} @i{@b{t}}
- @subsubheading Arguments and Values::
- @i{packages-to-unuse}---a @i{designator} for
- a @i{list} of @i{package designators}.
- @i{package}---a @i{package designator}.
- The default is the @i{current package}.
- @subsubheading Description::
- @b{unuse-package} causes @i{package} to cease inheriting
- all the @i{external symbols} of
- @i{packages-to-unuse}; @b{unuse-package} undoes
- the effects of @b{use-package}. The
- @i{packages-to-unuse}
- are removed from the @i{use list} of @i{package}.
- Any @i{symbols} that have been
- @i{imported} into @i{package} continue to be @i{present} in @i{package}.
- @subsubheading Examples::
- @example
- (in-package "COMMON-LISP-USER") @result{} #<PACKAGE "COMMON-LISP-USER">
- (export (intern "SHOES" (make-package 'temp)) 'temp) @result{} T
- (find-symbol "SHOES") @result{} NIL, NIL
- (use-package 'temp) @result{} T
- (find-symbol "SHOES") @result{} SHOES, :INHERITED
- (find (find-package 'temp) (package-use-list 'common-lisp-user)) @result{} #<PACKAGE "TEMP">
- (unuse-package 'temp) @result{} T
- (find-symbol "SHOES") @result{} NIL, NIL
- @end example
- @subsubheading Side Effects::
- The @i{use list} of @i{package} is modified.
- @subsubheading Affected By::
- Current state of the package system.
- @subsubheading See Also::
- @ref{use-package}
- ,
- @ref{package-use-list}
- @node use-package, defpackage, unuse-package, Packages Dictionary
- @subsection use-package [Function]
- @code{use-package} @i{packages-to-use {&optional} package} @result{} @i{@b{t}}
- @subsubheading Arguments and Values::
- @i{packages-to-use}---a @i{designator} for
- a @i{list} of @i{package designators}.
- The @t{KEYWORD} @i{package} may not be supplied.
- @i{package}---a @i{package designator}.
- The @t{KEYWORD} @i{package} cannot be supplied.
- The default is the @i{current package}.
- @subsubheading Description::
- @b{use-package} causes @i{package} to inherit all the
- @i{external symbols} of @i{packages-to-use}.
- The inherited @i{symbols} become @i{accessible} as
- @i{internal symbols} of @i{package}.
- @i{Packages-to-use} are added to the @i{use list} of @i{package}
- if they are not there already. All @i{external symbols} in
- @i{packages-to-use} become @i{accessible} in @i{package}
- as @i{internal symbols}.
- @b{use-package} does not cause any new @i{symbols} to be @i{present}
- in @i{package} but only makes them @i{accessible} by inheritance.
- @b{use-package} checks for
- name conflicts between the newly imported symbols and those already
- @i{accessible} in @i{package}.
- A name conflict in @b{use-package}
- between two external symbols inherited
- by @i{package} from @i{packages-to-use} may be resolved in favor of
- either @i{symbol}
- by @i{importing} one of them into @i{package} and making it a
- shadowing symbol.
- @subsubheading Examples::
- @example
- (export (intern "LAND-FILL" (make-package 'trash)) 'trash) @result{} T
- (find-symbol "LAND-FILL" (make-package 'temp)) @result{} NIL, NIL
- (package-use-list 'temp) @result{} (#<PACKAGE "TEMP">)
- (use-package 'trash 'temp) @result{} T
- (package-use-list 'temp) @result{} (#<PACKAGE "TEMP"> #<PACKAGE "TRASH">)
- (find-symbol "LAND-FILL" 'temp) @result{} TRASH:LAND-FILL, :INHERITED
- @end example
- @subsubheading Side Effects::
- The @i{use list} of @i{package} may be modified.
- @subsubheading See Also::
- @ref{unuse-package}
- ,
- @ref{package-use-list}
- ,
- @ref{Package Concepts}
- @subsubheading Notes::
- It is permissible for a @i{package} P_1
- to @i{use} a @i{package} P_2
- even if P_2 already uses P_1.
- The using of @i{packages} is not transitive,
- so no problem results from the apparent circularity.
- @node defpackage, do-symbols, use-package, Packages Dictionary
- @subsection defpackage [Macro]
- @code{defpackage} @i{defined-package-name [[!@i{option}]]} @result{} @i{package}
- @w{@i{option} ::=@{{(}@t{:nicknames} @{@i{nickname}@}{*}@r{)}@}{*} | }
- @w{ @r{(}@t{:documentation} @i{string}@r{)} | }
- @w{ @{{(}@t{:use} @{@i{package-name}@}{*}@r{)}@}{*} | }
- @w{ @{{(}@t{:shadow} @{!@i{symbol-name}@}{*}@r{)}@}{*} | }
- @w{ @{{(}@t{:shadowing-import-from} @i{package-name} @{!@i{symbol-name}@}{*}@r{)}@}{*} | }
- @w{ @{{(}@t{:import-from} @i{package-name} @{!@i{symbol-name}@}{*}@r{)}@}{*} | }
- @w{ @{{(}@t{:export} @{!@i{symbol-name}@}{*}@r{)}@}{*} | }
- @w{ @{{(}@t{:intern} @{!@i{symbol-name}@}{*}@r{)}@}{*} | }
- @w{ @r{(}@t{:size} @i{integer}@r{)}}
- @w{@i{symbol-name} ::=(@i{symbol} | @i{string})}
- @subsubheading Arguments and Values::
- @i{defined-package-name}---a @i{string designator}.
- @i{package-name}---a @i{package designator}.
- @i{nickname}---a @i{string designator}.
- @i{symbol-name}---a @i{string designator}.
- @i{package}---the @i{package} named @i{package-name}.
- @subsubheading Description::
- @b{defpackage} creates a @i{package} as specified and returns
- the @i{package}.
- If @i{defined-package-name} already refers to an existing
- @i{package}, the name-to-package mapping for that name is not changed.
- If the new definition is at variance with the current state of that
- @i{package}, the consequences are undefined; an implementation
- might choose to modify the existing @i{package} to reflect the
- new definition. If @i{defined-package-name} is a @i{symbol},
- its @i{name} is used.
- The standard @i{options} are described below.
- @table @asis
- @item @t{:nicknames}
- The arguments to @t{:nicknames} set the @i{package}'s nicknames to the
- supplied names.
- @item @t{:documentation}
- The argument to @t{:documentation} specifies a @i{documentation string};
- it is attached as a @i{documentation string} to the @i{package}.
- At most one @t{:documentation} option
- can appear in a single @b{defpackage} @i{form}.
- @item @t{:use}
- The arguments to @t{:use} set the @i{packages} that the @i{package}
- named by @i{package-name}
- will inherit from. If @t{:use} is not supplied,
- it defaults to the same @i{implementation-dependent} value as the @t{:use} @i{argument} to
- @b{make-package}.
- @item @t{:shadow}
- The arguments to @t{:shadow}, @i{symbol-names}, name @i{symbols}
- that are to be created in the @i{package} being defined.
- These @i{symbols} are added to the list of shadowing
- @i{symbols} effectively as if by @b{shadow}.
- @item @t{:shadowing-import-from}
- The @i{symbols} named by the argument @i{symbol-names}
- are found (involving a lookup as if by @b{find-symbol})
- in the specified @i{package-name}. The resulting @i{symbols}
- are @i{imported} into the @i{package} being defined, and
- placed on the shadowing symbols list as if by @b{shadowing-import}.
- In no case are @i{symbols} created in any @i{package}
- other than the one being defined.
- @item @t{:import-from}
- The @i{symbols} named by the argument @i{symbol-names}
- are found in the @i{package} named by @i{package-name} and
- they are @i{imported} into the @i{package} being defined.
- In no case are @i{symbols} created in any @i{package}
- other than the one being defined.
- @item @t{:export}
- The @i{symbols} named by
- the argument @i{symbol-names} are found
- or created in the @i{package} being defined
- and @i{exported}.
- The @t{:export} option interacts
- with the @t{:use} option, since inherited @i{symbols}
- can be used rather than new ones created.
- The @t{:export} option interacts
- with the
- @t{:import-from} and @t{:shadowing-import-from} options, since
- @i{imported}
- symbols can be used rather than new ones created.
- If an argument to the @t{:export} option is @i{accessible} as
- an (inherited) @i{internal symbol} via @b{use-package}, that the
- @i{symbol} named by @i{symbol-name}
- is first @i{imported} into the @i{package} being
- defined, and is then @i{exported} from that @i{package}.
- @item @t{:intern}
- The @i{symbols} named by the argument @i{symbol-names}
- are found or created in the @i{package} being defined.
- The @t{:intern} option interacts with the
- @t{:use} option, since inherited @i{symbols}
- can be used rather than new ones created.
- @item @t{:size}
- The argument to the @t{:size} option
- declares the approximate number of @i{symbols} expected in the
- @i{package}.
- This is an efficiency hint only and might be ignored by an
- implementation.
- @end table
- The order in which the options appear in a
- @b{defpackage} form is irrelevant.
- The order in which they are executed is as follows:
- @table @asis
- @item 1.
- @t{:shadow} and @t{:shadowing-import-from}.
- @item 2.
- @t{:use}.
- @item 3.
- @t{:import-from} and @t{:intern}.
- @item 4.
- @t{:export}.
- @end table
- Shadows are established first, since they might be necessary to block
- spurious name conflicts when the @t{:use}
- option is processed. The @t{:use} option is executed
- next so that @t{:intern} and @t{:export} options can refer to normally
- inherited @i{symbols}.
- The @t{:export} option is executed last so that it can refer to
- @i{symbols} created by any of the other options; in
- particular, @i{shadowing symbols} and
- @i{imported} @i{symbols} can be made external.
- If a {defpackage} @i{form} appears as a @i{top level form},
- all of the actions normally performed by this @i{macro}
- at load time must also be performed at compile time.
- @subsubheading Examples::
- @example
- (defpackage "MY-PACKAGE"
- (:nicknames "MYPKG" "MY-PKG")
- (:use "COMMON-LISP")
- (:shadow "CAR" "CDR")
- (:shadowing-import-from "VENDOR-COMMON-LISP" "CONS")
- (:import-from "VENDOR-COMMON-LISP" "GC")
- (:export "EQ" "CONS" "FROBOLA")
- )
- (defpackage my-package
- (:nicknames mypkg :MY-PKG) ; remember Common Lisp conventions for case
- (:use common-lisp) ; conversion on symbols
- (:shadow CAR :cdr #:cons)
- (:export "CONS") ; this is the shadowed one.
- )
- @end example
- @subsubheading Affected By::
- Existing @i{packages}.
- @subsubheading Exceptional Situations::
- If one of the supplied @t{:nicknames} already
- refers to an existing @i{package},
- an error of @i{type} @b{package-error} is signaled.
- An error of @i{type} @b{program-error} should be signaled if @t{:size} or @t{:documentation}
- appears more than once.
- Since @i{implementations} might allow extended @i{options}
- an error of @i{type} @b{program-error} should be signaled
- if an @i{option} is present that is not
- actually supported in the host @i{implementation}.
- The collection of @i{symbol-name} arguments given to the options
- @t{:shadow}, @t{:intern},
- @t{:import-from}, and @t{:shadowing-import-from} must
- all be disjoint; additionally, the @i{symbol-name} arguments given to
- @t{:export} and @t{:intern}
- must be disjoint.
- Disjoint in this context is defined as no two of the @i{symbol-names}
- being @b{string=} with each other. If either condition is
- violated, an error of @i{type} @b{program-error} should be signaled.
- For the @t{:shadowing-import-from} and @t{:import-from} options,
- a @i{correctable} @i{error} of @i{type} @b{package-error}
- is signaled if no @i{symbol} is
- @i{accessible} in the @i{package} named by
- @i{package-name} for one of the argument @i{symbol-names}.
- Name conflict errors are handled by the underlying calls to
- @b{make-package}, @b{use-package}, @b{import}, and
- @b{export}. See @ref{Package Concepts}.
- @subsubheading See Also::
- @ref{documentation; (setf documentation)}
- ,
- @ref{Package Concepts},
- @ref{Compilation}
- @subsubheading Notes::
- The @t{:intern} option is useful if an @t{:import-from} or a
- @t{:shadowing-import-from} option in a subsequent call to @b{defpackage}
- (for some other @i{package}) expects to find
- these @i{symbols} @i{accessible} but not necessarily external.
- It is recommended that the entire @i{package} definition is put
- in a single place, and that all the @i{package} definitions of a
- program are in a single file. This file can be @i{loaded} before
- @i{loading} or compiling anything else that depends on those
- @i{packages}. Such a file can be read in the @t{COMMON-LISP-USER} @i{package},
- avoiding any initial state issues.
- @b{defpackage} cannot be used to create two ``mutually
- recursive'' packages, such as:
- @example
- (defpackage my-package
- (:use common-lisp your-package) ;requires your-package to exist first
- (:export "MY-FUN"))
- (defpackage your-package
- (:use common-lisp)
- (:import-from my-package "MY-FUN") ;requires my-package to exist first
- (:export "MY-FUN"))
- @end example
- However, nothing prevents the user from using the
- @i{package}-affecting functions
- such as @b{use-package},
- @b{import}, and @b{export} to establish such links
- after a more standard use of @b{defpackage}.
- The macroexpansion of @b{defpackage}
- could usefully canonicalize the names
- into @i{strings},
- so that even if a source file has random @i{symbols} in the
- @b{defpackage} form, the compiled file would only contain
- @i{strings}.
- Frequently additional @i{implementation-dependent} options take the
- form of a @i{keyword} standing by itself as an abbreviation for a list
- @t{(keyword T)}; this syntax should be properly reported as an unrecognized
- option in implementations that do not support it.
- @node do-symbols, intern, defpackage, Packages Dictionary
- @subsection do-symbols, do-external-symbols, do-all-symbols [Macro]
- @code{do-symbols} @i{@r{(}var @r{[}package @r{[}result-form@r{]}@r{]}@r{)}
- @{@i{declaration}@}{*}
- @{tag | statement@}{*}}@*
- @result{} @i{@{@i{result}@}{*}}
- @code{do-external-symbols} @i{@r{(}var @r{[}package @r{[}result-form@r{]}@r{]}@r{)}
- @{@i{declaration}@}{*}
- @{tag | statement@}{*}}@*
- @result{} @i{@{@i{result}@}{*}}
- @code{do-all-symbols} @i{@r{(}var @r{[}result-form@r{]}@r{)}
- @{@i{declaration}@}{*}
- @{tag | statement@}{*}}@*
- @result{} @i{@{@i{result}@}{*}}
- @subsubheading Arguments and Values::
- @i{var}---a @i{variable} @i{name}; not evaluated.
- @i{package}---a @i{package designator}; evaluated.
- The default in @b{do-symbols} and @b{do-external-symbols} is the @i{current package}.
- @i{result-form}---a @i{form}; evaluated as described below.
- The default is @b{nil}.
- @i{declaration}---a @b{declare} @i{expression}; not evaluated.
- @i{tag}---a @i{go tag}; not evaluated.
- @i{statement}---a @i{compound form}; evaluated as described below.
- @i{results}---the @i{values} returned by the @i{result-form}
- if a @i{normal return} occurs,
- or else, if an @i{explicit return} occurs, the @i{values} that were transferred.
- @subsubheading Description::
- @b{do-symbols},
- @b{do-external-symbols}, and
- @b{do-all-symbols} iterate over the @i{symbols}
- of @i{packages}.
- For each @i{symbol} in the set of @i{packages} chosen,
- the @i{var} is bound to the @i{symbol},
- and the @i{statements} in the body are executed.
- When all the @i{symbols} have been processed,
- @i{result-form} is evaluated and returned as the value of the macro.
- @b{do-symbols} iterates
- over the @i{symbols} @i{accessible} in
- @i{package}.
- @i{Statements} may execute more than once for @i{symbols}
- that are inherited from multiple @i{packages}.
- @b{do-all-symbols} iterates on every @i{registered package}.
- @b{do-all-symbols} will not process every @i{symbol}
- whatsoever, because a @i{symbol} not @i{accessible} in any
- @i{registered package} will not be processed.
- @b{do-all-symbols} may cause a @i{symbol} that is @i{present} in
- several @i{packages} to be processed more than once.
- @b{do-external-symbols} iterates on the external symbols of @i{package}.
- When @i{result-form} is evaluated, @i{var} is bound and has the value @b{nil}.
- An @i{implicit block} named @b{nil} surrounds the entire @b{do-symbols},
- @b{do-external-symbols}, or @b{do-all-symbols} @i{form}.
- @b{return} or @b{return-from} may be used to terminate the
- iteration prematurely.
- If execution of the body affects which @i{symbols}
- are contained in the set of @i{packages} over which iteration
- is occurring, other than to
- remove the @i{symbol}
- currently the value of @i{var} by using @b{unintern},
- the consequences are undefined.
- For each of these macros, the
- @i{scope} of the name binding does not include any
- initial value form, but the optional result forms are included.
- Any @i{tag} in the body is treated as with @b{tagbody}.
- @subsubheading Examples::
- @example
- (make-package 'temp :use nil) @result{} #<PACKAGE "TEMP">
- (intern "SHY" 'temp) @result{} TEMP::SHY, NIL ;SHY will be an internal symbol
- ;in the package TEMP
- (export (intern "BOLD" 'temp) 'temp) @result{} T ;BOLD will be external
- (let ((lst ()))
- (do-symbols (s (find-package 'temp)) (push s lst))
- lst)
- @result{} (TEMP::SHY TEMP:BOLD)
- @i{OR}@result{} (TEMP:BOLD TEMP::SHY)
- (let ((lst ()))
- (do-external-symbols (s (find-package 'temp) lst) (push s lst))
- lst)
- @result{} (TEMP:BOLD)
- (let ((lst ()))
- (do-all-symbols (s lst)
- (when (eq (find-package 'temp) (symbol-package s)) (push s lst)))
- lst)
- @result{} (TEMP::SHY TEMP:BOLD)
- @i{OR}@result{} (TEMP:BOLD TEMP::SHY)
- @end example
- @subsubheading See Also::
- @ref{intern}
- ,
- @ref{export}
- ,
- @ref{Traversal Rules and Side Effects}
- @node intern, package-name, do-symbols, Packages Dictionary
- @subsection intern [Function]
- @code{intern} @i{string {&optional} package} @result{} @i{symbol, status}
- @subsubheading Arguments and Values::
- @i{string}---a @i{string}.
- @i{package}---a @i{package designator}.
- The default is the @i{current package}.
- @i{symbol}---a @i{symbol}.
- @i{status}---one of @t{:inherited}, @t{:external}, @t{:internal}, or @b{nil}.
- @subsubheading Description::
- @b{intern} enters a @i{symbol} named @i{string} into @i{package}.
- If a @i{symbol} whose name is the same as @i{string}
- is already @i{accessible} in @i{package}, it is returned.
- If no such @i{symbol} is @i{accessible} in @i{package},
- a new @i{symbol} with the given name is created
- and entered into @i{package} as an @i{internal symbol},
- or as an @i{external symbol} if the @i{package} is the @t{KEYWORD} @i{package};
- @i{package} becomes the @i{home package} of the created @i{symbol}.
- The first value returned by @b{intern}, @i{symbol},
- is the @i{symbol} that was found or
- created.
- The meaning of the @i{secondary value}, @i{status}, is as follows:
- @table @asis
- @item @t{:internal}
- The @i{symbol} was found
- and is
- @i{present} in @i{package} as an @i{internal symbol}.
- @item @t{:external}
- The @i{symbol} was found
- and is
- @i{present} as an @i{external symbol}.
- @item @t{:inherited}
- The @i{symbol} was found
- and is inherited via @b{use-package}
- (which implies that the @i{symbol} is internal).
- @item @b{nil}
- No pre-existing @i{symbol} was found,
- so one was created.
- It is @i{implementation-dependent} whether the @i{string}
- that becomes the new @i{symbol}'s @i{name} is the given
- @i{string} or a copy of it. Once a @i{string}
- has been given as the @i{string} @i{argument} to
- @i{intern} in this situation where a new @i{symbol} is created,
- the consequences are undefined if a
- subsequent attempt is made to alter that @i{string}.
- @end table
- @subsubheading Examples::
- @example
- (in-package "COMMON-LISP-USER") @result{} #<PACKAGE "COMMON-LISP-USER">
- (intern "Never-Before") @result{} |Never-Before|, NIL
- (intern "Never-Before") @result{} |Never-Before|, :INTERNAL
- (intern "NEVER-BEFORE" "KEYWORD") @result{} :NEVER-BEFORE, NIL
- (intern "NEVER-BEFORE" "KEYWORD") @result{} :NEVER-BEFORE, :EXTERNAL
- @end example
- @subsubheading See Also::
- @ref{find-symbol}
- ,
- @ref{read; read-preserving-whitespace}
- ,
- @b{symbol},
- @ref{unintern}
- ,
- @ref{Symbols as Tokens}
- @subsubheading Notes::
- @b{intern} does not need to do any name conflict checking
- because it never creates a new @i{symbol}
- if there is already an @i{accessible} @i{symbol} with the name given.
- @node package-name, package-nicknames, intern, Packages Dictionary
- @subsection package-name [Function]
- @code{package-name} @i{package} @result{} @i{name}
- @subsubheading Arguments and Values::
- @i{package}---a @i{package designator}.
- @i{name}---a @i{string}
- or @b{nil}.
- @subsubheading Description::
- @b{package-name} returns the @i{string} that names @i{package},
- or @b{nil} if the @i{package} @i{designator}
- is a @i{package} @i{object} that has no name (see the @i{function} @b{delete-package}).
- @subsubheading Examples::
- @example
- (in-package "COMMON-LISP-USER") @result{} #<PACKAGE "COMMON-LISP-USER">
- (package-name *package*) @result{} "COMMON-LISP-USER"
- (package-name (symbol-package :test)) @result{} "KEYWORD"
- (package-name (find-package 'common-lisp)) @result{} "COMMON-LISP"
- @end example
- @example
- (defvar *foo-package* (make-package "FOO"))
- (rename-package "FOO" "FOO0")
- (package-name *foo-package*) @result{} "FOO0"
- @end example
- @subsubheading Exceptional Situations::
- Should signal an error of @i{type} @b{type-error}
- if @i{package} is not a @i{package designator}.
- @node package-nicknames, package-shadowing-symbols, package-name, Packages Dictionary
- @subsection package-nicknames [Function]
- @code{package-nicknames} @i{package} @result{} @i{nicknames}
- @subsubheading Arguments and Values::
- @i{package}---a @i{package designator}.
- @i{nicknames}---a @i{list} of @i{strings}.
- @subsubheading Description::
- Returns the @i{list} of nickname @i{strings}
- for @i{package}, not including the name of @i{package}.
- @subsubheading Examples::
- @example
- (package-nicknames (make-package 'temporary
- :nicknames '("TEMP" "temp")))
- @result{} ("temp" "TEMP")
- @end example
- @subsubheading Exceptional Situations::
- Should signal an error of @i{type} @b{type-error}
- if @i{package} is not a @i{package designator}.
- @node package-shadowing-symbols, package-use-list, package-nicknames, Packages Dictionary
- @subsection package-shadowing-symbols [Function]
- @code{package-shadowing-symbols} @i{package} @result{} @i{symbols}
- @subsubheading Arguments and Values::
- @i{package}---a @i{package designator}.
- @i{symbols}---a @i{list} of @i{symbols}.
- @subsubheading Description::
- Returns a @i{list} of @i{symbols} that have been declared
- as @i{shadowing symbols} in @i{package} by @b{shadow}
- or @b{shadowing-import} (or the equivalent @b{defpackage} options).
- All @i{symbols} on this @i{list} are @i{present} in @i{package}.
- @subsubheading Examples::
- @example
- (package-shadowing-symbols (make-package 'temp)) @result{} ()
- (shadow 'cdr 'temp) @result{} T
- (package-shadowing-symbols 'temp) @result{} (TEMP::CDR)
- (intern "PILL" 'temp) @result{} TEMP::PILL, NIL
- (shadowing-import 'pill 'temp) @result{} T
- (package-shadowing-symbols 'temp) @result{} (PILL TEMP::CDR)
- @end example
- @subsubheading Exceptional Situations::
- Should signal an error of @i{type} @b{type-error}
- if @i{package} is not a @i{package designator}.
- @subsubheading See Also::
- @ref{shadow}
- ,
- @ref{shadowing-import}
- @subsubheading Notes::
- Whether the list of @i{symbols} is @i{fresh} is @i{implementation-dependent}.
- @node package-use-list, package-used-by-list, package-shadowing-symbols, Packages Dictionary
- @subsection package-use-list [Function]
- @code{package-use-list} @i{package} @result{} @i{use-list}
- @subsubheading Arguments and Values::
- @i{package}---a @i{package designator}.
- @i{use-list}---a @i{list} of @i{package} @i{objects}.
- @subsubheading Description::
- Returns a @i{list} of other @i{packages} used by @i{package}.
- @subsubheading Examples::
- @example
- (package-use-list (make-package 'temp)) @result{} (#<PACKAGE "COMMON-LISP">)
- (use-package 'common-lisp-user 'temp) @result{} T
- (package-use-list 'temp) @result{} (#<PACKAGE "COMMON-LISP"> #<PACKAGE "COMMON-LISP-USER">)
- @end example
- @subsubheading Exceptional Situations::
- Should signal an error of @i{type} @b{type-error}
- if @i{package} is not a @i{package designator}.
- @subsubheading See Also::
- @ref{use-package}
- ,
- @ref{unuse-package}
- @node package-used-by-list, packagep, package-use-list, Packages Dictionary
- @subsection package-used-by-list [Function]
- @code{package-used-by-list} @i{package} @result{} @i{used-by-list}
- @subsubheading Arguments and Values::
- @i{package}---a @i{package designator}.
- @i{used-by-list}---a @i{list} of @i{package} @i{objects}.
- @subsubheading Description::
- @b{package-used-by-list} returns a @i{list}
- of other @i{packages} that use @i{package}.
- @subsubheading Examples::
- @example
- (package-used-by-list (make-package 'temp)) @result{} ()
- (make-package 'trash :use '(temp)) @result{} #<PACKAGE "TRASH">
- (package-used-by-list 'temp) @result{} (#<PACKAGE "TRASH">)
- @end example
- @subsubheading Exceptional Situations::
- Should signal an error of @i{type} @b{type-error}
- if @i{package} is not a @i{package}.
- @subsubheading See Also::
- @ref{use-package}
- ,
- @ref{unuse-package}
- @node packagep, *package*, package-used-by-list, Packages Dictionary
- @subsection packagep [Function]
- @code{packagep} @i{object} @result{} @i{generalized-boolean}
- @subsubheading Arguments and Values::
- @i{object}---an @i{object}.
- @i{generalized-boolean}---a @i{generalized boolean}.
- @subsubheading Description::
- Returns @i{true} if @i{object} is of @i{type} @b{package};
- otherwise, returns @i{false}.
- @subsubheading Examples::
- @example
- (packagep *package*) @result{} @i{true}
- (packagep 'common-lisp) @result{} @i{false}
- (packagep (find-package 'common-lisp)) @result{} @i{true}
- @end example
- @subsubheading Notes::
- @example
- (packagep @i{object}) @equiv{} (typep @i{object} 'package)
- @end example
- @node *package*, package-error, packagep, Packages Dictionary
- @subsection *package* [Variable]
- @subsubheading Value Type::
- a @i{package} @i{object}.
- @subsubheading Initial Value::
- the @t{COMMON-LISP-USER} @i{package}.
- @subsubheading Description::
- Whatever @i{package} @i{object} is currently
- the @i{value} of @b{*package*} is referred to as the @i{current package}.
- @subsubheading Examples::
- @example
- (in-package "COMMON-LISP-USER") @result{} #<PACKAGE "COMMON-LISP-USER">
- *package* @result{} #<PACKAGE "COMMON-LISP-USER">
- (make-package "SAMPLE-PACKAGE" :use '("COMMON-LISP"))
- @result{} #<PACKAGE "SAMPLE-PACKAGE">
- (list
- (symbol-package
- (let ((*package* (find-package 'sample-package)))
- (setq *some-symbol* (read-from-string "just-testing"))))
- *package*)
- @result{} (#<PACKAGE "SAMPLE-PACKAGE"> #<PACKAGE "COMMON-LISP-USER">)
- (list (symbol-package (read-from-string "just-testing"))
- *package*)
- @result{} (#<PACKAGE "COMMON-LISP-USER"> #<PACKAGE "COMMON-LISP-USER">)
- (eq 'foo (intern "FOO")) @result{} @i{true}
- (eq 'foo (let ((*package* (find-package 'sample-package)))
- (intern "FOO")))
- @result{} @i{false}
- @end example
- @subsubheading Affected By::
- @b{load},
- @b{compile-file},
- @b{in-package}
- @subsubheading See Also::
- @ref{compile-file}
- ,
- @ref{in-package}
- ,
- @ref{load}
- ,
- @ref{package}
- @node package-error, package-error-package, *package*, Packages Dictionary
- @subsection package-error [Condition Type]
- @subsubheading Class Precedence List::
- @b{package-error},
- @b{error},
- @b{serious-condition},
- @b{condition},
- @b{t}
- @subsubheading Description::
- The @i{type} @b{package-error} consists of @i{error} @i{conditions}
- related to operations on @i{packages}.
- The offending @i{package} (or @i{package} @i{name})
- is initialized by the @t{:package} initialization argument to @b{make-condition},
- and is @i{accessed} by the @i{function} @b{package-error-package}.
- @subsubheading See Also::
- @ref{package-error-package}
- ,
- @ref{Conditions}
- @node package-error-package, , package-error, Packages Dictionary
- @subsection package-error-package [Function]
- @code{package-error-package} @i{condition} @result{} @i{package}
- @subsubheading Arguments and Values::
- @i{condition}---a @i{condition} of @i{type} @b{package-error}.
- @i{package}---a @i{package designator}.
- @subsubheading Description::
- Returns a @i{designator} for the offending @i{package}
- in the @i{situation} represented by the @i{condition}.
- @subsubheading Examples::
- @example
- (package-error-package
- (make-condition 'package-error
- :package (find-package "COMMON-LISP")))
- @result{} #<Package "COMMON-LISP">
- @end example
- @subsubheading See Also::
- @b{package-error}
- @c end of including dict-packages
- @c %**end of chapter
|