% -*- Mode: TeX -*- %!!! Barmar: Tell me why multiple packags are needed. % e.g., to prevent variable and function conflicts. \beginsubSection{Introduction to Packages} %% 10.0.0 7 %% 11.0.0 4 A \newterm{package} establishes a mapping from names to \term{symbols}. At any given time, one \term{package} is current. The \newterm{current package} is the one that is \thevalueof{*package*}. When using the \term{Lisp reader}, it is possible to refer to \term{symbols} in \term{packages} other than the current one through the use of \term{package prefixes} in the printed representation of the \term{symbol}. %% 11.2.0 5 \Thenextfigure\ lists some \term{defined names} that are applicable to \term{packages}. %Shouldn't be needed. This info is all explicit now. -kmp 29-Apr-91 % For the \term{operators} listed here, all optional arguments named % \param{package} default to the \term{current package}. Where an \term{operator} takes an argument that is either a \term{symbol} or a \term{list} of \term{symbols}, an argument of \nil\ is treated as an empty \term{list} of \term{symbols}. Any \param{package} argument may be either a \term{string}, a \term{symbol}, or a \term{package}. If a \term{symbol} is supplied, its name will be used as the \term{package} name. \issue{REQUIRE-PATHNAME-DEFAULTS:ELIMINATE} % \funref{provide}, \funref{require}, and \varref{*modules*} will % be removed from this table (and the language). %PROVIDE and REQUIRE need to be removed, right? -kmp 29-Apr-91 %Nope! -kmp 13-Feb-92 \displaythree{Some Defined Names related to Packages}{ *modules*&import&provide\cr *package*&in-package&rename-package\cr defpackage&intern&require\cr do-all-symbols&list-all-packages&shadow\cr do-external-symbols&make-package&shadowing-import\cr do-symbols&package-name&unexport\cr export&package-nicknames&unintern\cr find-all-symbols&package-shadowing-symbols&unuse-package\cr find-package&package-use-list&use-package\cr find-symbol&package-used-by-list&\cr } \endissue{REQUIRE-PATHNAME-DEFAULTS:ELIMINATE} \beginsubsubsection{Package Names and Nicknames} %% 11.0.0 19 Each \term{package} has a \term{name} (a \term{string}) and perhaps some \term{nicknames} (also \term{strings}). These are assigned when the \term{package} is created and can be changed later. %% 11.0.0 20 There is a single namespace for \term{packages}. \Thefunction{find-package} translates a package \term{name} or \term{nickname} into the associated \term{package}. \Thefunction{package-name} returns the \term{name} of a \term{package}. \Thefunction{package-nicknames} returns a \term{list} of all \term{nicknames} for a \term{package}. \funref{rename-package} removes a \term{package}'s current \term{name} and \term{nicknames} and replaces them with new ones specified by the caller. \endsubsubsection%{Package Names and Nicknames} \beginsubsubsection{Symbols in a Package} \beginsubsubsubsection{Internal and External Symbols} %% 11.0.0 5 The mappings in a \term{package} are divided into two classes, external and internal. The \term{symbols} targeted by these different mappings are called \term{external symbols} and \term{internal symbols}\idxterm{internal symbol} of the \term{package}. Within a \term{package}, a name refers to one \term{symbol} or to none; if it does refer to a \term{symbol}, then it is either external or internal in that \term{package}, but not both. %% 11.0.0 6 \newtermidx{External symbols}{external symbol} are part of the package's public interface to other \term{packages}. \term{Symbols} become \term{external symbols} of a given \term{package} if they have been \term{exported} from that \term{package}. %% 11.0.0 7 A \term{symbol} has the same \term{name} no matter what \term{package} it is \term{present} in, but it might be an \term{external symbol} of some \term{packages} and an \term{internal symbol} of others. \endsubsubsubsection%{Internal and External Symbols} \beginsubsubsubsection{Package Inheritance} %% 11.0.0 9 \term{Packages} can be built up in layers. From one point of view, a \term{package} is a single collection of mappings from \term{strings} into \term{internal symbols} and \term{external symbols}. However, some of these mappings might be established within the \term{package} itself, while other mappings are inherited from other \term{packages} via \funref{use-package}. A \term{symbol} is said to be \newterm{present} in a \term{package} if the mapping is in the \term{package} itself and is not inherited from somewhere else. %% 11.4.0 There is no way to inherit the \term{internal symbols} of another \term{package}; to refer to an \term{internal symbol} using the \term{Lisp reader}, a \term{package} containing the \term{symbol} must be made to be the \term{current package}, a \term{package prefix} must be used, or the \term{symbol} must be \term{imported} into the \term{current package}. \endsubsubsubsection%{Package Inheritance} \beginsubsubsubsection{Accessibility of Symbols in a Package} A \term{symbol} becomes \newterm{accessible} in a \term{package} if that is its \term{home package} when it is created, or if it is \term{imported} into that \term{package}, or by inheritance via \funref{use-package}. If a \term{symbol} is \term{accessible} in a \term{package}, it can be referred to when using the \term{Lisp reader} without a \term{package prefix} when that \term{package} is the \term{current package}, regardless of whether it is \term{present} or inherited. %???Move the following to \secref\Syntax??? %A \term{symbol} will not necessarily always have the same %printed representation because the way \term{symbols} are printed %depends on whether or not they are \term{accessible} in the \term{current package}. %% 11.0.0 35 \term{Symbols} from one \term{package} can be made \term{accessible} in another \term{package} in two ways. %% 11.0.0 36 \beginlist \itemitem{--} Any individual \term{symbol} can be added to a \term{package} by use of \funref{import}. After the call to \funref{import} the \term{symbol} is \term{present} in the importing \term{package}. The status of the \term{symbol} in the \term{package} it came from (if any) is unchanged, and the \term{home package} for this \term{symbol} is unchanged. Once \term{imported}, a \term{symbol} is \term{present} in the importing \term{package} and can be removed only by calling \funref{unintern}. %% 11.4.0 4 A \term{symbol} is \term{shadowed}\meaning{3} by another \term{symbol} in some \term{package} if the first \term{symbol} would be \term{accessible} by inheritance if not for the presence of the second \term{symbol}. See \funref{shadowing-import}. %% 11.4.0 39 %% 11.4.0 40 \itemitem{--} The second mechanism for making \term{symbols} from one \term{package} \term{accessible} in another is provided by \funref{use-package}. All of the \term{external symbols} of the used \term{package} are inherited by the using \term{package}. \Thefunction{unuse-package} undoes the effects of a previous \funref{use-package}. \endlist \endsubsubsubsection%{Accessibility of Symbols in a Package} \beginsubsubsubsection{Locating a Symbol in a Package} %% 11.4.0 8 When a \term{symbol} is to be located in a given \term{package} the following occurs: \beginlist \itemitem{--} The \term{external symbols} and \term{internal symbols} of the \term{package} are searched for the \term{symbol}. \itemitem{--} The \term{external symbols} of the used \term{packages} are searched in some unspecified order. The order does not matter; see the rules for handling name conflicts listed below. \endlist \endsubsubsubsection%{Locating a Symbol in a Package} \beginsubsubsubsection{Prevention of Name Conflicts in Packages} %% 11.0.0 46 Within one \term{package}, any particular name can refer to at most one \term{symbol}. A name conflict is said to occur when there would be more than one candidate \term{symbol}. Any time a name conflict is about to occur, a \term{correctable} \term{error} is signaled. The following rules apply to name conflicts: %% 11.0.0 47 \beginlist %% 11.0.0 49 \itemitem{--} 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. \itemitem{--} If the \term{same} \term{symbol} is \term{accessible} to a \term{package} through more than one path, there is no name conflict. A \term{symbol} cannot conflict with itself. Name conflicts occur only between \term{distinct} \term{symbols} with the same name (under \funref{string=}). %% 11.0.0 48 \itemitem{--} Every \term{package} has a list of shadowing \term{symbols}. A shadowing \term{symbol} takes precedence over any other \term{symbol} of the same name that would otherwise be \term{accessible} in the \term{package}. A name conflict involving a shadowing symbol is always resolved in favor of the shadowing \term{symbol}, without signaling an error (except for one exception involving \funref{import}). See \funref{shadow} and \funref{shadowing-import}. %% 11.0.0 50 \itemitem{--} The functions \funref{use-package}, \funref{import}, and \funref{export} check for name conflicts. %% 11.0.0 52 \itemitem{--} \funref{shadow} and \funref{shadowing-import} never signal a name-conflict error. %% 11.0.0 53 \itemitem{--} % \funref{unuse-package}, \funref{unexport}, and \funref{unintern} % (when the \term{symbol} being uninterned is not a \term{shadowing symbol}) % do not need to do any name-conflict checking. %% Rewording for JonL: \funref{unuse-package} and \funref{unexport} do not need to do any name-conflict checking. \funref{unintern} does name-conflict checking only when a \term{symbol} being \term{uninterned} is a \term{shadowing symbol}\idxterm{shadowing symbol}. %% 11.0.0 54 \itemitem{--} Giving a shadowing symbol to \funref{unintern} can uncover a name conflict that had previously been resolved by the shadowing. %% 11.0.0 55 %\itemitem{--} %Aborting from a name-conflict error leaves the original \term{symbol} %\term{accessible}. \itemitem{--} Package functions signal name-conflict errors \oftype{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 \funref{export} is given a \term{list} of \term{symbols}, aborting from a name conflict caused by the second \term{symbol} in the \term{list} might still export the first \term{symbol} in the \term{list}. However, a name-conflict error caused by \funref{export} of a single \term{symbol} will be signaled before that \term{symbol}'s \term{accessibility} in any \term{package} is changed. %% 11.0.0 56 \itemitem{--} 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 \term{package} structure should be altered to reflect the resolution of the name conflict, via \funref{shadowing-import}, \funref{unintern}, %!!! Barmar: The next two bullets don't mention "unexport". or \funref{unexport}. %% 11.0.0 57 \itemitem{--} A name conflict in \funref{use-package} between a \term{symbol} %directly \term{present} in the using \term{package} and an \term{external symbol} of the used \term{package} is resolved in favor of the first \term{symbol} by making it a shadowing \term{symbol}, or in favor of the second \term{symbol} by uninterning the first \term{symbol} from the using \term{package}. %% 11.0.0 60 \itemitem{--} A name conflict in \funref{export} or \funref{unintern} due to a \term{package}'s inheriting two \term{distinct} \term{symbols} with the \term{same} \term{name} (under \funref{string=}) from two other \term{packages} can be resolved in favor of either \term{symbol} by importing it into the using \term{package} and making it a \term{shadowing symbol}\idxterm{shadowing symbol}, just as with \funref{use-package}. \endlist \endsubsubsubsection%{Prevention of Name Conflicts in Packages} \endsubsubsection%{Symbols in a Package} \endsubSection%{Introduction to Packages} \beginsubSection{Standardized Packages} %% 11.6.0 1 This section describes the \term{packages} that are available in every \term{conforming implementation}. A summary of the \term{names} and \term{nicknames} of those \term{standardized} \term{packages} is given in \thenextfigure. \tablefigtwo{Standardized Package Names}{Name}{Nicknames}{ \packref{common-lisp}&\packref{cl}\cr \packref{common-lisp-user}&\packref{cl-user}\cr \packref{keyword}&\i{none}\cr } \issue{LISP-PACKAGE-NAME:COMMON-LISP} %% 11.6.0 2 % Discussion of package LISP and USER removed. -kmp 15-Feb-92 \endissue{LISP-PACKAGE-NAME:COMMON-LISP} \issue{PACKAGE-CLUTTER:REDUCE} %% 11.6.0 5 % Discussion of the CLtL1 package named SYSTEM removed. \endissue{PACKAGE-CLUTTER:REDUCE} \beginsubsubsection{The COMMON-LISP Package} \idxpackref{common-lisp}\idxpackref{cl} \issue{LISP-PACKAGE-NAME:COMMON-LISP} \Thepackage{common-lisp} contains the primitives of the \clisp\ system as defined by this specification. Its \term{external} \term{symbols} include all of the \term{defined names} (except for \term{defined names} in \thepackage{keyword}) that are present in the \clisp\ system, such as \funref{car}, \funref{cdr}, \varref{*package*}, etc. \Thepackage{common-lisp} has the \term{nickname} \packref{cl}. \issue{PACKAGE-CLUTTER:REDUCE} \Thepackage{common-lisp} has as \term{external} \term{symbols} those symbols enumerated in the figures in \secref\CLsymbols, and no others. These \term{external} \term{symbols} are \term{present} in \thepackage{common-lisp} but their \term{home package} need not be \thepackage{common-lisp}. For example, the symbol \f{HELP} cannot be an \term{external symbol} of \thepackage{common-lisp} because it is not mentioned in \secref\CLsymbols. In contrast, the \term{symbol} \misc{variable} must be an \term{external symbol} of \thepackage{common-lisp} even though it has no definition because it is listed in that section (to support its use as a valid second \term{argument} to \thefunction{documentation}). % Moved this sentence out of previous paragraph. --sjl 7 Mar 92 \Thepackage{common-lisp} can have additional \term{internal symbols}. \endissue{PACKAGE-CLUTTER:REDUCE} \beginsubsubsubsection{Constraints on the COMMON-LISP Package for Conforming Implementations} \issue{PACKAGE-CLUTTER:REDUCE} In a \term{conforming implementation}, an \term{external} \term{symbol} of \thepackage{common-lisp} can have a \term{function}, \term{macro}, or \term{special operator} definition, %top level value ??? a \term{global variable} definition (or other status as a \term{dynamic variable} due to a \declref{special} \term{proclamation}), or a \term{type} definition only if explicitly permitted in this standard. %% That's the definition of a conforming implementation. -kmp %that is, a \term{conforming program} may assume that this is true. For example, \funref{fboundp} \term{yields} \term{false} for any \term{external symbol} of \thepackage{common-lisp} that is not the \term{name} of a \term{standardized} \term{function}, \term{macro} or \term{special operator}, and \funref{boundp} returns \term{false} for any \term{external symbol} of \thepackage{common-lisp} that is not the \term{name} of a \term{standardized} \term{global variable}. It also follows that \term{conforming programs} can use \term{external symbols} of \thepackage{common-lisp} as the \term{names} of local \term{lexical variables} with confidence that those \term{names} have not been \term{proclaimed} \declref{special} by the \term{implementation} unless those \term{symbols} are \term{names} of \term{standardized} \term{global variables}. %%KMP: Initially or for all times? -kmp 2-Jan-91 %%Sandra: The intent was to cover properties put there by the implementation, not the user. %%KMP: I double-checked the issues, and that seems to be right. % No \term{external symbols} of \thepackage{common-lisp} % can have \term{properties} with \term{property indicators} % that are either \term{external symbols} of any \term{standardized} \term{packages} % or otherwise \term{accessible} in \thepackage{common-lisp-user}. %% Rewritten. -kmp 15-Feb-92 A \term{conforming implementation} must not place any \term{property} on an \term{external symbol} of \thepackage{common-lisp} using a \term{property indicator} that is either an \term{external symbol} of any \term{standardized} \term{package} or a \term{symbol} that is otherwise \term{accessible} in \thepackage{common-lisp-user}. %Valid programs % can assume that the conformal Lisp implementation will not % have prohibited properties. The proposal LISP-SYMBOL-REDEFINITION % addresses the converse; that is, what user programs are allowed % to do. \endissue{PACKAGE-CLUTTER:REDUCE} \endsubsubsubsection%{Constraints on the COMMON-LISP Package for Conforming Implementations} \beginsubsubsubsection{Constraints on the COMMON-LISP Package for Conforming Programs} \idxtext{redefinition} \issue{LISP-SYMBOL-REDEFINITION:MAR89-X3J13} Except where explicitly allowed, the consequences are undefined if any of the following actions are performed on an \term{external symbol} of \thepackage{common-lisp}: \beginlist \itemitem{1.} \term{Binding} or altering its value (lexically or dynamically). (Some exceptions are noted below.) \itemitem{2.} Defining, \issue{LISP-SYMBOL-REDEFINITION-AGAIN:MORE-FIXES} undefining, \endissue{LISP-SYMBOL-REDEFINITION-AGAIN:MORE-FIXES} or \term{binding} it as a \term{function}. (Some exceptions are noted below.) \itemitem{3.} Defining, \issue{LISP-SYMBOL-REDEFINITION-AGAIN:MORE-FIXES} undefining, \endissue{LISP-SYMBOL-REDEFINITION-AGAIN:MORE-FIXES} or \term{binding} it as a \term{macro} \issue{DEFINE-COMPILER-MACRO:X3J13-NOV89} or \term{compiler macro}. \endissue{DEFINE-COMPILER-MACRO:X3J13-NOV89} (Some exceptions are noted below.) % added define-condition --sjl 7 Mar 92 \itemitem{4.} Defining it as a \term{type specifier} (via \macref{defstruct}, \macref{defclass}, \macref{deftype}, \macref{define-condition}). \itemitem{5.} Defining it as a structure (via \macref{defstruct}). \itemitem{6.} Defining it as a \term{declaration} with a \declref{declaration} \term{proclamation}. \itemitem{7.} Defining it as a \term{symbol macro}. %%Barmar notes that this can't be done to any symbols. %% Sandra complained, too. % \itemitem{n.} Altering its name. \itemitem{8.} Altering its \term{home package}. \itemitem{9.} Tracing it (via \macref{trace}). %What's this "or lexical" biz? -kmp 13-May-91 \itemitem{10.} Declaring or proclaiming it %% we voted down the lexical declaration proposal. --sjl 7 Mar 92 % \declref{special} or lexical \declref{special} (via \misc{declare}, \issue{PROCLAIM-ETC-IN-COMPILE-FILE:NEW-MACRO} \specref{declaim}, \endissue{PROCLAIM-ETC-IN-COMPILE-FILE:NEW-MACRO} or \funref{proclaim}). \itemitem{11.} Declaring or proclaiming its \declref{type} or \declref{ftype} (via \misc{declare}, \issue{PROCLAIM-ETC-IN-COMPILE-FILE:NEW-MACRO} \macref{declaim}, \endissue{PROCLAIM-ETC-IN-COMPILE-FILE:NEW-MACRO} or \funref{proclaim}). (Some exceptions are noted below.) \itemitem{12.} Removing it from \thepackage{common-lisp}. \issue{LISP-SYMBOL-REDEFINITION-AGAIN:MORE-FIXES} \itemitem{13.} Defining a \term{setf expander} for it (via \funref{defsetf} or \funref{define-setf-method}). \itemitem{14.} Defining, undefining, or binding its \term{setf function name}. \itemitem{15.} Defining it as a \term{method combination} type (via \funref{define-method-combination}). \itemitem{16.} Using it as the class-name argument to \funref{setf} of \funref{find-class}. \itemitem{17.} Binding it as a \term{catch tag}. \itemitem{18.} Binding it as a \term{restart} \term{name}. \itemitem{19.} Defining a \term{method} for a \term{standardized} \term{generic function} which is \term{applicable} when all of the \term{arguments} are \term{direct instances} of \term{standardized} \term{classes}. \endissue{LISP-SYMBOL-REDEFINITION-AGAIN:MORE-FIXES} \endlist \beginsubsubsubsubsection{Some Exceptions to Constraints on the COMMON-LISP Package for Conforming Programs} If an \term{external symbol} of \thepackage{common-lisp} is not globally defined as a \term{standardized} \term{dynamic variable} or \term{constant variable}, it is allowed to lexically \term{bind} it and to declare the \declref{type} of that \term{binding}, and it is allowed to locally \term{establish} it as a \term{symbol macro} (\eg with \specref{symbol-macrolet}). %KMP: Maybe clarify that binding CL special variables is ok, % but that their type decls are lexical. Is that right? %%I implemented the first half of that suggestion. -kmp 15-Feb-92 Unless explicitly specified otherwise, if an \term{external symbol} of \thepackage{common-lisp} is globally defined as a \term{standardized} \term{dynamic variable}, it is permitted to \term{bind} or \term{assign} that \term{dynamic variable} provided that the ``Value Type'' constraints on the \term{dynamic variable} are maintained, and that the new \term{value} of the \term{variable} is consistent with the stated purpose of the \term{variable}. If an \term{external symbol} of \thepackage{common-lisp} is not defined as a \term{standardized} \term{function}, \term{macro}, or \term{special operator}, it is allowed to lexically \term{bind} it as a \term{function} (\eg with \specref{flet}), to declare the \declref{ftype} of that \term{binding}, and %KMP: Barmar wanted some explication here. I think it was sandra who had % asked for this tracing feature just in case the implementation supported it. (in \term{implementations} which provide the ability to do so) to \macref{trace} that \term{binding}. If an \term{external symbol} of \thepackage{common-lisp} is not defined as a \term{standardized} \term{function}, \term{macro}, or \term{special operator}, it is allowed to lexically \term{bind} it as a \term{macro} (\eg with \specref{macrolet}). \endissue{LISP-SYMBOL-REDEFINITION:MAR89-X3J13} \endissue{LISP-PACKAGE-NAME:COMMON-LISP} \issue{LISP-SYMBOL-REDEFINITION-AGAIN:MORE-FIXES} If an \term{external symbol} of \thepackage{common-lisp} is not defined as a \term{standardized} \term{function}, \term{macro}, or \term{special operator}, it is allowed to lexically \term{bind} its \term{setf function name} as a \term{function}, and to declare the \declref{ftype} of that \term{binding}. \endissue{LISP-SYMBOL-REDEFINITION-AGAIN:MORE-FIXES} \endsubsubsubsubsection%{Some Exceptions to Constraints on the COMMON-LISP Package for Conforming Programs} \endsubsubsubsection%{Constraints on the COMMON-LISP Package for Conforming Programs} \endsubsubsection%{The COMMON-LISP Package} \beginsubsubsection{The COMMON-LISP-USER Package} \idxpackref{common-lisp-user}\idxpackref{cl-user} \Thepackage{common-lisp-user} is the \term{current package} when a \clisp\ system starts up. This \term{package} \term{uses} \thepackage{common-lisp}. \Thepackage{common-lisp-user} has the \term{nickname} \packref{cl-user}. \issue{PACKAGE-CLUTTER:REDUCE} \Thepackage{common-lisp-user} can have additional \term{symbols} \term{interned} within it; it can \term{use} other \term{implementation-defined} \term{packages}. \endissue{PACKAGE-CLUTTER:REDUCE} \endsubsubsection%{The COMMON-LISP-USER Package} \beginsubsubsection{The KEYWORD Package} \idxpackref{keyword} %% 5.1.2 6 %% 11.3.0 5 % % KMP: This isn't a very apt description! % % %% 11.6.0 4 % \Thepackage{keyword} contains all of the \newterm{keywords}\meaning{1} % used by built-in or user-defined \term{functions}. %% Replaced: \Thepackage{keyword} contains \term{symbols}, called \term{keywords}\meaning{1}, that are typically used as special markers in \term{programs} and their associated data \term{expressions}\meaning{1}. \term{Symbol} \term{tokens} that start with a \term{package marker} are parsed by the \term{Lisp reader} as \term{symbols} in \thepackage{keyword}; \seesection\SymbolTokens. This makes it notationally convenient to use \term{keywords} when communicating between programs in different \term{packages}. For example, the mechanism for passing \term{keyword parameters} in a \term{call} uses \term{keywords}\meaning{1} to name the corresponding \term{arguments}; \seesection\OrdinaryLambdaLists. \term{Symbols} in \thepackage{keyword} are, by definition, \oftype{keyword}. \beginsubsubsubsection{Interning a Symbol in the KEYWORD Package} \Thepackage{keyword} is treated differently than other \term{packages} in that special actions are taken when a \term{symbol} is \term{interned} in it. In particular, when a \term{symbol} is \term{interned} in \thepackage{keyword}, it is automatically made to be an \term{external symbol} and is automatically made to be a \term{constant variable} with itself as a \term{value}. %% Not really needed. This is documented adequately under SYMBOL-VALUE. % \Thefunction{symbol-value} can be used to % \term{access} the \term{value} of a \term{keyword}\meaning{1}.) \endsubsubsubsection%{Interning a Symbol in the KEYWORD Package} \beginsubsubsubsection{Notes about The KEYWORD Package} % name conflicts are not an issue because these \term{symbols} % are used only as labels, not to carry application-specific information. %% This isn't really true and is arguably confusing. %% I think the following is what it was getting at. -kmp 15-Feb-92 It is generally best to confine the use of \term{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 \kwd{on} and \kwd{off}. In situations where the set of names is not finitely enumerable (\ie where name conflicts might arise) it is frequently best to use \term{symbols} in some \term{package} other than \packref{keyword} so that conflicts will be naturally avoided. For example, it is generally not wise for a \term{program} to use a \term{keyword}\meaning{1} as a \term{property indicator}, since if there were ever another \term{program} that did the same thing, each would clobber the other's data. \endsubsubsubsection%{Notes about The KEYWORD Package} \endsubsubsection%{The KEYWORD Package} \beginsubsubsection{Implementation-Defined Packages} \issue{PACKAGE-CLUTTER:REDUCE} Other, \term{implementation-defined} \term{packages} might be present in the initial \clisp\ environment. %If it is appropriate, the standard might contain % as an example that implementations might have a package named % "SYSTEM". \endissue{PACKAGE-CLUTTER:REDUCE} It is recommended, but not required, that the documentation for a \term{conforming implementation} contain a full list of all \term{package} names initially present in that \term{implementation} but not specified in this specification. (See also the \term{function} \funref{list-all-packages}.) \endsubsubsection%{Implementation-Defined Packages} \endsubSection%{Standardized Packages}