12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577 |
- % -*- Mode: TeX -*-
- %!!! Sandra: Avoid talking about "symbols in the foo package"
- % This is ambiguous. Does it mean "accessible in", "external in",
- % "whose home package is", ...?
- % Symbol Types
- % Symbol Creation
- % Symbol Accessors
- % Symbol Properties
- % Symbol Function/Value
- %-------------------- Symbol Types --------------------
- \begincom{symbol}\ftype{System Class}
- \label Class Precedence List::
- \typeref{symbol},
- \typeref{t}
- \label Description::
- %% 11.0.0 11
- %% 10.3.0 2
- %% 10.3.0 3
- %%% 11.0.0 12
- % Some stuff about INTERN, IMPORT, SHADOWING-IMPORT, UNINTERN, etc. was commented out.
- \term{Symbols} are used for their \term{object} identity to name various entities
- in \clisp, including (but not limited to) linguistic entities such as
- \term{variables} and \term{functions}.
- \term{Symbols} can be collected together into \term{packages}.
- A \term{symbol} is said to be \term{interned} in a \term{package}
- if it is \term{accessible} in that \term{package};
- the same \term{symbol} can be \term{interned} in more than one \term{package}.
- If a \term{symbol} is not \term{interned} in any \term{package},
- it is called \term{uninterned}.
- An \term{interned} \term{symbol} is uniquely identifiable by its \term{name} from
- any \term{package} in which it is \term{accessible}.
- %!!! Sandra: I REALLY dislike this terminology. Can't we call these "attributes"
- % rather than "components" and leave out the discussion of "cells" entirely?
- % My attempt at simplifying some of this convoluted discussion of ``cells''
- % follows. --sjl 16 Mar 92
- %\term{Symbols} have the following components, or \term{cells}.
- %(In each case, it is \term{implementation-dependent} how these \term{cells}
- %are represented. For example, they might be explicitly represented as a ``slots''
- %in the \term{symbol} itself, or they might be represented as external associations
- %between the \term{symbol} and the \term{cell} \term{value} (if any) in some
- %\term{environment} or table, or in some cases they might not be explicitly
- %represented at all.)
- \term{Symbols} have the following attributes.
- %% "historically" => "historical" per Boyer/Kaufmann/Moore #11 (by X3J13 vote at May 4-5, 1994 meeting)
- %% -kmp 9-May-94
- For historical reasons,
- these are sometimes referred to as \term{cells}, although the actual
- internal representation of \term{symbols} and their attributes is
- \term{implementation-dependent}.
- \beginlist
- %% 10.0.0 5
- %% 10.2.0 1
- \itemitem{\b{Name}}
-
- The \term{name} of a \term{symbol} is a \term{string} used to identify the \term{symbol}.
- Every \term{symbol} has a \term{name},
- \issue{CHARACTER-PROPOSAL:2-6-3}
- and the consequences are undefined if that \term{name} is altered.
- \endissue{CHARACTER-PROPOSAL:2-6-3}
- The \term{name} is used as part of the external, printed representation of
- the \term{symbol}; \seesection\CharacterSyntax.
- \Thefunction{symbol-name} returns the \term{name} of a given \term{symbol}.
- \issue{CHARACTER-PROPOSAL:2-6-2}
- %% I replaced this on suggestion of KAB. It doesn't match CHARACTER-PROPOSAL 2.6.2,
- %% so who knows how it got here. -kmp 21-Jan-92
- % The \term{characters} in a \term{symbol}'s \term{name} must be \term{graphic},
- % and may come from any supported \term{character} \term{repertoire}.
- A \term{symbol} may have any \term{character} in its \term{name}.
- \endissue{CHARACTER-PROPOSAL:2-6-2}
- %% 10.3.0 1
- %% 10.0.0 3
- %% 10.0.0 4
- %% 10.1.0 1
- %% 10.1.0 2
- %% 10.1.0 3
- %% 10.0.0 4
- %% 10.3.0 4
- %% 11.0.0 8
- %% 11.0.0 10
- %% 11.0.0 28
- \itemitem{\b{Package}}
- The \term{object} in this \term{cell} is called the \term{home package}
- of the \term{symbol}. If the \term{home package} is \nil, the \term{symbol}
- is sometimes said to have no \term{home package}.
- When a \term{symbol} is first created, it has no \term{home package}.
- When it is first \term{interned}, the \term{package} in which it is
- initially \term{interned} becomes its \term{home package}.
- The \term{home package} of a \term{symbol} can be \term{accessed}
- by using \thefunction{symbol-package}.
- If a \term{symbol} is \term{uninterned} from the \term{package}
- which is its \term{home package}, its \term{home package} is set to \nil.
- Depending on whether there is another \term{package} in which the \term{symbol}
- is \term{interned}, the symbol might or might not really be an \term{uninterned} \term{symbol}.
- A \term{symbol} with no \term{home package} is therefore called
- \term{apparently uninterned}.
- \issue{LISP-SYMBOL-REDEFINITION:MAR89-X3J13}
- The consequences are undefined if an attempt is made to alter the \term{home package}
- of a \term{symbol}
- %Added per Sandra -kmp 13-Dec-91
- % ``accessible'' is wrong here -- sjl 16 Mar 92
- %accessible
- external
- in \thepackage{common-lisp} or \thepackage{keyword}.
- \endissue{LISP-SYMBOL-REDEFINITION:MAR89-X3J13}
- %% 10.1.0 4
- \itemitem{\b{Property list}}
- The \term{property list} of a \term{symbol} provides a mechanism for
- associating named attributes with that \term{symbol}.
- The operations for adding and removing entries are \term{destructive}
- to the \term{property list}. \clisp\ provides \term{operators} both for
- direct manipulation of \term{property list} \term{objects}
- (\eg see \funref{getf}, \funref{remf}, and \funref{symbol-plist})
- and for implicit manipulation of a \term{symbol}'s \term{property list}
- by reference to the \term{symbol}
- (\eg see \funref{get} and \funref{remprop}).
- The \term{property list} associated with a \term{fresh} \term{symbol} is
- initially \term{null}.
- %!!! Sandra: What about the property list of symbols in the COMMON-LISP package?
- %% 10.0.0 8
- \itemitem{\b{Value}}
- %!!! Sandra: You could avoid this awkwardness [in sentence 1] by not talking about
- % cells at all! All you have to say is:
- % "If a symbol has a value attribute, it is said to be bound ..."
- %!!! KAB: Does this first sentence really have to be said?
- % My attempt at rewording this is below. --sjl 16 Mar 92
- %Conceptually, every \term{symbol} has a \term{value cell}, although
- %no \term{implementation} is required to explicitly represent it as an \term{object}.
- %A \term{symbol}'s \term{value cell} might or might not contain an \term{object}.
- %If it does contain an \term{object}, it is said to be \term{bound},
- If a symbol has a value attribute, it is said to be \term{bound},
- and that fact can be detected by \thefunction{boundp}.
- The \term{object} contained in the \term{value cell} of a \term{bound} \term{symbol}
- is the \term{value} of the \term{global variable} named by that \term{symbol},
- and can be \term{accessed} by \thefunction{symbol-value}.
- A \term{symbol} can be made to be \term{unbound} by \thefunction{makunbound}.
- The consequences are undefined if an attempt is made to change the \term{value}
- of a \term{symbol} that names a \term{constant variable}, or to make such a
- \term{symbol} be \term{unbound}.
- \itemitem{\b{Function}}
- %!!! Sandra: See comment on "Value" above.
- %!!! KAB: Does this first sentence really have to be said?
- % My attempt at rewording this is below. --sjl 16 Mar 92
- %Conceptually, every \term{symbol} has a \term{function cell}, although
- %no \term{implementation} is required to explicitly represent it as an \term{object}.
- %A \term{symbol}'s \term{function cell} might or might not contain an \term{object}.
- %If it does contain an \term{object}, it is said to be \term{fbound},
- If a symbol has a function attribute, it is said to be \term{fbound},
- and that fact can be detected by \thefunction{fboundp}.
- If the \term{symbol} is the \term{name} of a \term{function} in the \term{global environment},
- the \term{function cell} contains the \term{function},
- and can be \term{accessed} by \thefunction{symbol-function}.
- If the \term{symbol} is the \term{name} of either
- a \term{macro} in the \term{global environment} (see \funref{macro-function})
- or a \term{special operator} (see \funref{special-operator-p}),
- the \term{symbol} is \term{fbound},
- and can be \term{accessed} by \thefunction{symbol-function},
- but the \term{object} which the \term{function cell}
- contains is of \term{implementation-dependent} \term{type} and purpose.
- A \term{symbol} can be made to be \term{funbound} by \thefunction{fmakunbound}.
- The consequences are undefined if an attempt is made to change the \term{functional value}
- of a \term{symbol} that names a \term{special form}.
- \endlist
- Operations on a \term{symbol}'s \term{value cell} and \term{function cell} are
- sometimes described in terms of their effect on the \term{symbol} itself, but
- the user should keep in mind that there is an intimate relationship between the
- contents of those \term{cells} and the \term{global variable} or
- global \term{function} definition, respectively.
- \term{Symbols} are used as identifiers for \term{lexical variables} and
- lexical \term{function} definitions, but in that role, only their \term{object}
- identity is significant. \clisp\ provides no operation on a \term{symbol} that
- can have any effect on a \term{lexical variable} or
- on a lexical \term{function} definition.
- \label See Also::
- {\secref\SymbolTokens},
- {\secref\PotentialNumbersAsTokens},
- {\secref\PrintingSymbols}
- \endcom%{symbol}\ftype{System Class}
- \begincom{keyword}\ftype{Type}
- %Added per Barrett's suggestion. -kmp 23-Oct-90
- \label Supertypes::
- \typeref{keyword},
- \typeref{symbol},
- \typeref{t}
- \label Description::
- \Thetype{keyword} includes all \term{symbols} \term{interned} \thepackage{keyword}.
- %!!! Non-standard use of "intern"?
- \term{Interning} a \term{symbol} in \thepackage{keyword} has three automatic effects:
- \beginlist
- \item{1.} It causes the \term{symbol} to become \term{bound} to itself.
- \item{2.} It causes the \term{symbol} to become an \term{external symbol}
- of \thepackage{keyword}.
- \item{3.} It causes the \term{symbol} to become a \term{constant variable}.
- \endlist
-
- \label See Also::
- \funref{keywordp}
- \endcom%{keyword}\ftype{Type}
- %%% ========== SYMBOLP
- \begincom{symbolp}\ftype{Function}
- \label Syntax::
- \DefunWithValues symbolp {object} {generalized-boolean}
- \label Arguments and Values::
- \param{object}---an \term{object}.
- \param{generalized-boolean}---a \term{generalized boolean}.
- \label Description::
- %% 6.2.2 4
- \TypePredicate{object}{symbol}
- \label Examples::
- \code
- (symbolp 'elephant) \EV \term{true}
- (symbolp 12) \EV \term{false}
- (symbolp nil) \EV \term{true}
- (symbolp '()) \EV \term{true}
- (symbolp :test) \EV \term{true}
- (symbolp "hello") \EV \term{false}
- \endcode
- \label Side Effects:\None.
- \label Affected By:\None.
- \label Exceptional Situations:\None!
- \label See Also::
- \funref{keywordp},
- \typeref{symbol},
- \funref{typep}
- \label Notes::
- \code
- (symbolp \param{object}) \EQ (typep \param{object} 'symbol)
- \endcode
- \endcom
- %%% ========== KEYWORDP
- \begincom{keywordp}\ftype{Function}
- \label Syntax::
- \DefunWithValues keywordp {object} {generalized-boolean}
- \label Arguments and Values::
- \param{object}---an \term{object}.
- \param{generalized-boolean}---a \term{generalized boolean}.
- \label Description::
- %% 10.3.0 15
- \Predicate{object}{a \term{keyword}\meaning{1}}
- \label Examples::
- \code
- (keywordp 'elephant) \EV \term{false}
- (keywordp 12) \EV \term{false}
- (keywordp :test) \EV \term{true}
- (keywordp ':test) \EV \term{true}
- (keywordp nil) \EV \term{false}
- (keywordp :nil) \EV \term{true}
- (keywordp '(:test)) \EV \term{false}
- (keywordp "hello") \EV \term{false}
- (keywordp ":hello") \EV \term{false}
- (keywordp '&optional) \EV \term{false}
- \endcode
- \label Side Effects:\None.
- \label Affected By:\None.
- \label Exceptional Situations:\None!
- \label See Also::
- \funref{constantp},
- \funref{keyword},
- \funref{symbolp},
- \funref{symbol-package}
-
- \label Notes:\None.
- \endcom
- %-------------------- Symbol Creation --------------------
- %%% ========== MAKE-SYMBOL
- \begincom{make-symbol}\ftype{Function}
- \label Syntax::
- \DefunWithValues make-symbol {name} {new-symbol}
- \label Arguments and Values::
- %"simple string" => "string" per Barrett. -kmp 14-Feb-92
- \param{name}---a \term{string}.
- \param{new-symbol}---a \term{fresh}, \term{uninterned} \term{symbol}.
- \label Description::
- %% 10.3.0 5
- \funref{make-symbol} creates and returns a \term{fresh}, \term{uninterned}
- \term{symbol} whose \term{name} is the given \param{name}.
- The \param{new-symbol} is neither \term{bound} nor \term{fbound}
- and has a \term{null} \term{property list}.
- %% 10.3.0 6
- It is \term{implementation-dependent} whether the \term{string}
- that becomes the \param{new-symbol}'s \term{name} is the given
- \param{name} or a copy of it. Once a \term{string}
- has been given as the \param{name} \term{argument} to
- \term{make-symbol}, the consequences are undefined if a
- subsequent attempt is made to alter that \term{string}.
- \label Examples::
- \code
- (setq temp-string "temp") \EV "temp"
- (setq temp-symbol (make-symbol temp-string)) \EV #:|temp|
- (symbol-name temp-symbol) \EV "temp"
- (eq (symbol-name temp-symbol) temp-string) \EV \term{implementation-dependent}
- (find-symbol "temp") \EV NIL, NIL
- (eq (make-symbol temp-string) (make-symbol temp-string)) \EV \term{false}
- \endcode
- \label Side Effects:\None.
- % This sentence seems totally misplaced. --sjl 16 Mar 92
- %The \term{value} of the \term{place} named by \param{index}, if any, is modified.
- %% Sandra thinks this is excessive.
- %Creates a \term{fresh} \term{symbol}.
- \label Affected By:\None.
- \label Exceptional Situations::
- %"simple string" => "string" per Barrett. -kmp 14-Feb-92
- \Shouldchecktype{name}{a \term{string}}
- \label See Also::
- \funref{copy-symbol}
- \label Notes::
- No attempt is made by \funref{make-symbol} to convert the case
- of the \term{name} to uppercase. The only case conversion which ever
- occurs for \term{symbols} is done by the \term{Lisp reader}.
- The program interface to \term{symbol} creation retains case,
- and the program interface to interning symbols is case-sensitive.
- \endcom
- %%% ========== COPY-SYMBOL
- \begincom{copy-symbol}\ftype{Function}
- \label Syntax::
- \DefunWithValues copy-symbol {symbol {\opt} copy-properties} {new-symbol}
- \label Arguments and Values::
- \param{symbol}---a \term{symbol}.
- \param{copy-properties}---a \term{generalized boolean}.
- \Default{\term{false}}
- \param{new-symbol}---a \term{fresh}, \term{uninterned} \term{symbol}.
- \label Description::
- %% 10.3.0 8
- \issue{COPY-SYMBOL-PRINT-NAME:EQUAL}
- \funref{copy-symbol} returns a \term{fresh}, \term{uninterned} \term{symbol},
- the \term{name} of which is \funref{string=} to and possibly the \term{same} as
- the \term{name} of the given \param{symbol}.
- \endissue{COPY-SYMBOL-PRINT-NAME:EQUAL}
- If \param{copy-properties} is \term{false},
- the \param{new-symbol} is neither \term{bound} nor \term{fbound}
- and has a \term{null} \term{property list}.
- If \param{copy-properties} is \term{true}, then
- the initial \term{value} of \param{new-symbol} is
- the \term{value} of \param{symbol},
- the initial \term{function} definition of \param{new-symbol} is
- the \term{functional value} of \param{symbol},
- and the \term{property list} of \param{new-symbol} is
- \issue{COPY-SYMBOL-COPY-PLIST:COPY-LIST}
- a \term{copy}\meaning{2} of the \term{property list} of \param{symbol}.
- \endissue{COPY-SYMBOL-COPY-PLIST:COPY-LIST}
- \label Examples::
- \code
- (setq fred 'fred-smith) \EV FRED-SMITH
- (setf (symbol-value fred) 3) \EV 3
- (setq fred-clone-1a (copy-symbol fred nil)) \EV #:FRED-SMITH
- (setq fred-clone-1b (copy-symbol fred nil)) \EV #:FRED-SMITH
- (setq fred-clone-2a (copy-symbol fred t)) \EV #:FRED-SMITH
- (setq fred-clone-2b (copy-symbol fred t)) \EV #:FRED-SMITH
- (eq fred fred-clone-1a) \EV \term{false}
- (eq fred-clone-1a fred-clone-1b) \EV \term{false}
- (eq fred-clone-2a fred-clone-2b) \EV \term{false}
- (eq fred-clone-1a fred-clone-2a) \EV \term{false}
- (symbol-value fred) \EV 3
- (boundp fred-clone-1a) \EV \term{false}
- (symbol-value fred-clone-2a) \EV 3
- (setf (symbol-value fred-clone-2a) 4) \EV 4
- (symbol-value fred) \EV 3
- (symbol-value fred-clone-2a) \EV 4
- (symbol-value fred-clone-2b) \EV 3
- (boundp fred-clone-1a) \EV \term{false}
- (setf (symbol-function fred) #'(lambda (x) x)) \EV #<FUNCTION anonymous>
- (fboundp fred) \EV \term{true}
- (fboundp fred-clone-1a) \EV \term{false}
- (fboundp fred-clone-2a) \EV \term{false}
- \endcode
- \label Side Effects:\None.
- %% Sandra thinks this is excessive.
- %Creates a \term{fresh} \term{symbol}.
- \label Affected By:\None.
- \label Exceptional Situations::
- \Shouldchecktype{symbol}{a \term{symbol}}
- \label See Also::
- \funref{make-symbol}
- \label Notes::
- Implementors are encouraged not to copy the \term{string}
- which is the \term{symbol}'s \term{name} unnecessarily.
- Unless there is a good reason to do so, the normal implementation
- strategy is for the \param{new-symbol}'s \term{name} to
- be \term{identical} to the given \param{symbol}'s \term{name}.
- %% Barrett: This is only true if the implementation of MAKE-SYMBOL
- % doesn't copy, which it might.
- %
- % \code
- % (copy-symbol \param{x} nil) \EQ (make-symbol (symbol-name \param{x}))
- % \endcode
- \endcom
- %%% ========== GENSYM
- \begincom{gensym}\ftype{Function}
- \label Syntax::
- \DefunWithValues gensym {{\opt} x} {new-symbol}
- \label Arguments and Values::
- \param{x}---a \term{string} or a non-negative \term{integer}.
- \HairyDefault.
- \param{new-symbol}---a \term{fresh}, \term{uninterned} \term{symbol}.
- \label Description::
- %% 10.3.0 9
- %% 10.3.0 10
- %% 10.3.0 11
- Creates and returns a \term{fresh}, \term{uninterned} \term{symbol},
- as if by calling \funref{make-symbol}. (The only difference between
- \funref{gensym} and \funref{make-symbol} is in how the \param{new-symbol}'s
- \term{name} is determined.)
- The \term{name} of the \param{new-symbol} is the concatenation
- of a prefix, which defaults to \f{"G"}, and
- \issue{GENSYM-NAME-STICKINESS:LIKE-TEFLON}
- a suffix, which is the decimal representation of a number that
- defaults to \thevalueof{*gensym-counter*}.
- If \param{x} is supplied, and is a \term{string}, then that \term{string}
- is used as a prefix instead of \f{"G"} for this call to \funref{gensym} only.
- If \param{x} is supplied, and is an \term{integer}, then that \term{integer},
- instead of \thevalueof{*gensym-counter*}, is used as the suffix
- for this call to \funref{gensym} only.
- If and only if no explicit suffix is supplied,
- \varref{*gensym-counter*} is incremented after it is used.
- \endissue{GENSYM-NAME-STICKINESS:LIKE-TEFLON}
- \label Examples::
- \code
- (setq sym1 (gensym)) \EV #:G3142
- (symbol-package sym1) \EV NIL
- (setq sym2 (gensym 100)) \EV #:G100
- (setq sym3 (gensym 100)) \EV #:G100
- (eq sym2 sym3) \EV \term{false}
- (find-symbol "G100") \EV NIL, NIL
- (gensym "T") \EV #:T3143
- (gensym) \EV #:G3144
- \endcode
- \label Side Effects::
- %% Sandra thinks this is excessive.
- %Creates a \term{fresh} \term{symbol}.
- Might increment \varref{*gensym-counter*}.
- \label Affected By::
- \varref{*gensym-counter*}
- \label Exceptional Situations::
- \Shouldchecktype{x}{a \term{string} or a non-negative \term{integer}}
- \label See Also::
- \funref{gentemp},
- \varref{*gensym-counter*}
- \label Notes::
- The ability to pass a numeric argument to \funref{gensym} has been deprecated;
- explicitly \term{binding} \varref{*gensym-counter*} is now stylistically preferred.
- (The somewhat baroque conventions for the optional argument are historical
- in nature, and supported primarily for compatibility with older dialects
- of \Lisp. In modern code, it is recommended that the only kind of argument
- used be a string prefix. In general, though, to obtain more flexible control
- of the \param{new-symbol}'s \term{name}, consider using \funref{make-symbol} instead.)
- \endcom
- %%% ========== *GENSYM-COUNTER*
- \begincom{*gensym-counter*}\ftype{Variable}
- \issue{GENSYM-NAME-STICKINESS:LIKE-TEFLON}
- \label Value Type::
- a non-negative \term{integer}.
- \label Initial Value::
- %A non-negative \term{integer}, the magnitude of which is
- \term{implementation-dependent}.
- \label Description::
- A number which will be used in constructing the \term{name} of
- the next \term{symbol} generated by \thefunction{gensym}.
- \varref{*gensym-counter*} can be either \term{assigned} or \term{bound}
- at any time, but its value must always be a non-negative \term{integer}.
-
- \label Examples:\None.
- \label Affected By::
- \funref{gensym}.
- \label See Also::
- \funref{gensym}
- \label Notes::
- The ability to pass a numeric argument to \funref{gensym} has been deprecated;
- explicitly \term{binding} \varref{*gensym-counter*} is now stylistically preferred.
- \endissue{GENSYM-NAME-STICKINESS:LIKE-TEFLON}
- \endcom
- %%% ========== GENTEMP
- \begincom{gentemp}\ftype{Function}
- \label Syntax::
- \DefunWithValues gentemp {{\opt} prefix package} {new-symbol}
- \label Arguments and Values::
- \param{prefix}---a \term{string}.
- \Default{\f{"T"}}
- \param{package}---a \term{package designator}.
- \Default{the \term{current package}}
- \param{new-symbol}---a \term{fresh}, \term{interned} \term{symbol}.
- \label Description::
- %% 10.3.0 14
- \funref{gentemp} creates and returns a \term{fresh} \term{symbol},
- \term{interned} in the indicated \param{package}.
- %The \term{symbol} is guaranteed to be one that did not previously
- %exist in \param{package}.
- The \term{symbol} is guaranteed to be one that was not previously
- \term{accessible} in \param{package}.
- It is neither \term{bound} nor \term{fbound}, and has a \term{null}
- \term{property list}.
- The \term{name} of the \param{new-symbol} is the concatenation
- of the \param{prefix} and a suffix, which is taken from an internal
- counter used only by \funref{gentemp}. (If a \term{symbol} by that name
- % already exists in \param{package}, the counter is incremented as
- is already \term{accessible} in \param{package}, the counter is incremented as
- many times as is necessary to produce a \term{name} that is not already the
- \term{name} of a \term{symbol} \term{accessible} in \param{package}.)
- \label Examples::
- \code
- (gentemp) \EV T1298
- (gentemp "FOO") \EV FOO1299
- (find-symbol "FOO1300") \EV NIL, NIL
- (gentemp "FOO") \EV FOO1300
- (find-symbol "FOO1300") \EV FOO1300, :INTERNAL
- (intern "FOO1301") \EV FOO1301, :INTERNAL
- (gentemp "FOO") \EV FOO1302
- (gentemp) \EV T1303
- \endcode
- \label Side Effects::
- Its internal counter is incremented one or more times.
- \term{Interns} the \param{new-symbol} in \param{package}.
- \label Affected By::
- The current state of its internal counter, and
- the current state of the \param{package}.
- \label Exceptional Situations::
- \Shouldchecktype{prefix}{a \term{string}}
- \Shouldchecktype{package}{a \term{package designator}}
- \label See Also::
- \funref{gensym}
- \label Notes::
- The function \funref{gentemp} is deprecated.
- If \param{package} is \thepackage{keyword},
- the result is an \term{external symbol} of \param{package}.
- Otherwise, the result is an \term{internal symbol} of \param{package}.
- The \funref{gentemp} internal counter is independent of
- \varref{*gensym-counter*}, the counter used by \funref{gensym}.
- There is no provision for accessing the \funref{gentemp} internal counter.
- Just because \funref{gentemp} creates a \term{symbol} which did not
- previously exist does not mean that such a \term{symbol} might not be
- seen in the future (\eg in a data file---perhaps even created by the
- same program in another session). As such, this symbol is not truly
- unique in the same sense as a \term{gensym} would be. In particular,
- programs which do automatic code generation should be careful not to
- attach global attributes to such generated \term{symbols} (\eg
- \declref{special} \term{declarations}) and then write them into a file
- because such global attributes might, in a different session, end up
- applying to other \term{symbols} that were automatically generated on
- another day for some other purpose.
- \endcom
- %-------------------- Symbol Accessors --------------------
- %%% ========== SYMBOL-FUNCTION
- \begincom{symbol-function}\ftype{Accessor}
- \label Syntax::
- \DefunWithValues symbol-function {symbol} {contents}
- \Defsetf symbol-function {symbol} {new-contents}
- \label Arguments and Values::
- \issue{FUNCTION-TYPE:X3J13-MARCH-88}
- % The symbol need not be fbound for the SETF form. --sjl 16 Mar 92
- %\param{symbol}---an \term{fbound} \term{symbol}.
- \param{symbol}---a \term{symbol}.
- \endissue{FUNCTION-TYPE:X3J13-MARCH-88}
- \param{contents}---
- \issue{FUNCTION-TYPE:X3J13-MARCH-88}
- If the \param{symbol} is globally defined as a \term{macro} or a \term{special operator},
- %% Removed per Barrett. -kmp 14-Feb-92
- %and if the \param{symbol} is \term{fbound},
- an \term{object} of \term{implementation-dependent} nature and identity is returned.
- If the \param{symbol} is not globally defined as
- either a \term{macro} or a \term{special operator},
- and
- if the \param{symbol} is \term{fbound},
- a \term{function} \term{object} is returned.
- \endissue{FUNCTION-TYPE:X3J13-MARCH-88}
- \issue{FUNCTION-TYPE:X3J13-MARCH-88}
- \param{new-contents}---a \term{function}.
- \endissue{FUNCTION-TYPE:X3J13-MARCH-88}
- %% This shouldn't be needed, actually.
- % \issue{FUNCTION-TYPE:X3J13-MARCH-88}
- % The consequences of attempting to make the global \term{function} definition
- % of a \term{symbol} be a \term{symbol}, a \term{list}, or the value returned
- % by \funref{symbol-function} on the name of a \term{macro} or a
- % \term{special form} are unspecified.
- % \endissue{FUNCTION-TYPE:X3J13-MARCH-88}
- \label Description::
- %% 7.1.1 14
- \term{Accesses} the \term{symbol}'s \term{function cell}.
- \label Examples::
- %Some examples involving FBOUNDP simplified/corrected per Moore #2 (first public review)
- % -kmp 12-May-93
- \code
- (symbol-function 'car) \EV #<FUNCTION CAR>
- (symbol-function 'twice) is an error ;because TWICE isn't defined.
- (defun twice (n) (* n 2)) \EV TWICE
- (symbol-function 'twice) \EV #<FUNCTION TWICE>
- (list (twice 3)
- (funcall (function twice) 3)
- (funcall (symbol-function 'twice) 3))
- \EV (6 6 6)
- (flet ((twice (x) (list x x)))
- (list (twice 3)
- (funcall (function twice) 3)
- (funcall (symbol-function 'twice) 3)))
- \EV ((3 3) (3 3) 6)
- (setf (symbol-function 'twice) #'(lambda (x) (list x x)))
- \EV #<FUNCTION anonymous>
- (list (twice 3)
- (funcall (function twice) 3)
- (funcall (symbol-function 'twice) 3))
- \EV ((3 3) (3 3) (3 3))
- (fboundp 'defun) \EV \term{true}
- (symbol-function 'defun)
- \EV \term{implementation-dependent}
- (functionp (symbol-function 'defun))
- \EV \term{implementation-dependent}
- (defun symbol-function-or-nil (symbol)
- (if (and (fboundp symbol)
- (not (macro-function symbol))
- (not (special-operator-p symbol)))
- (symbol-function symbol)
- nil)) \EV SYMBOL-FUNCTION-OR-NIL
- (symbol-function-or-nil 'car) \EV #<FUNCTION CAR>
- (symbol-function-or-nil 'defun) \EV NIL
- \endcode
- \label Side Effects:\None.
- \label Affected By::
- \macref{defun}
- \label Exceptional Situations::
- \Shouldchecktype{symbol}{a \term{symbol}}
- Should signal \typeref{undefined-function} if \param{symbol} is not \term{fbound}
- and an attempt is made to \term{read} its definition. (No such error is signaled
- on an attempt to \term{write} its definition.)
- \label See Also::
- \funref{fboundp},
- \funref{fmakunbound},
- \funref{macro-function},
- \issue{SPECIAL-FORM-P-MISNOMER:RENAME}
- \funref{special-operator-p}
- \endissue{SPECIAL-FORM-P-MISNOMER:RENAME}
- \label Notes::
- %% 7.1.1 16
- \funref{symbol-function} cannot \term{access} the value of a lexical function name
- produced by \specref{flet} or \specref{labels}; it can \term{access} only
- the global function value.
- %!!! Sandra thinks this should be in the Description. I'm not so sure. -kmp 13-Dec-91
- \macref{setf} may be used with
- \funref{symbol-function} to replace a global function
- definition when the \term{symbol}'s function definition
- does not represent a \term{special operator}.
-
- \code
- (symbol-function \param{symbol}) \EQ (fdefinition \param{symbol})
- \endcode
- However, \funref{fdefinition} accepts arguments other than just \term{symbols}.
- \endcom
- %%% ========== SYMBOL-NAME
- \begincom{symbol-name}\ftype{Function}
- \label Syntax::
- \DefunWithValues symbol-name {symbol} {name}
- \label Arguments and Values::
- \param{symbol}---a \term{symbol}.
- %"simple string" => "string" per Barrett. -kmp 14-Feb-92
- \param{name}---a \term{string}.
- \label Description::
- %% 10.2.0 2
- \funref{symbol-name} returns the \term{name} of \param{symbol}.
- \issue{LISP-SYMBOL-REDEFINITION:MAR89-X3J13}
- The consequences are undefined if \param{name} is ever modified.
- \endissue{LISP-SYMBOL-REDEFINITION:MAR89-X3J13}
- \label Examples::
- \code
- (symbol-name 'temp) \EV "TEMP"
- (symbol-name :start) \EV "START"
- (symbol-name (gensym)) \EV "G1234" ;for example
- \endcode
- \label Side Effects:\None.
- \label Affected By:\None.
- \label Exceptional Situations::
- \Shouldchecktype{symbol}{a \term{symbol}}
- \label See Also:\None.
- \label Notes:\None.
- \endcom
- %%% ========== SYMBOL-PACKAGE
- \begincom{symbol-package}\ftype{Function}
- \label Syntax::
- \DefunWithValues symbol-package {symbol} {contents}
- \label Arguments and Values::
- \param{symbol}---a \term{symbol}.
- \param{contents}---a \term{package} \term{object} or \nil.
- \label Description::
- %% 10.3.0 15
- Returns the \term{home package} of \param{symbol}.
- \label Examples::
- \code
- (in-package "CL-USER") \EV #<PACKAGE "COMMON-LISP-USER">
- (symbol-package 'car) \EV #<PACKAGE "COMMON-LISP">
- (symbol-package 'bus) \EV #<PACKAGE "COMMON-LISP-USER">
- (symbol-package :optional) \EV #<PACKAGE "KEYWORD">
- ;; Gensyms are uninterned, so have no home package.
- (symbol-package (gensym)) \EV NIL
- (make-package 'pk1) \EV #<PACKAGE "PK1">
- (intern "SAMPLE1" "PK1") \EV PK1::SAMPLE1, NIL
- (export (find-symbol "SAMPLE1" "PK1") "PK1") \EV T
- (make-package 'pk2 :use '(pk1)) \EV #<PACKAGE "PK2">
- (find-symbol "SAMPLE1" "PK2") \EV PK1:SAMPLE1, :INHERITED
- (symbol-package 'pk1::sample1) \EV #<PACKAGE "PK1">
- (symbol-package 'pk2::sample1) \EV #<PACKAGE "PK1">
- (symbol-package 'pk1::sample2) \EV #<PACKAGE "PK1">
- (symbol-package 'pk2::sample2) \EV #<PACKAGE "PK2">
- ;; The next several forms create a scenario in which a symbol
- ;; is not really uninterned, but is "apparently uninterned",
- ;; and so SYMBOL-PACKAGE still returns NIL.
- (setq s3 'pk1::sample3) \EV PK1::SAMPLE3
- (import s3 'pk2) \EV T
- (unintern s3 'pk1) \EV T
- (symbol-package s3) \EV NIL
- (eq s3 'pk2::sample3) \EV T
- \endcode
- \label Side Effects:\None.
- \label Affected By::
- \funref{import},
- \funref{intern},
- \funref{unintern}
- \label Exceptional Situations::
- \Shouldchecktype{symbol}{a \term{symbol}}
- \label See Also::
- \funref{intern}
- \label Notes:\None.
- \endcom
- %%% ========== SYMBOL-PLIST
- \begincom{symbol-plist}\ftype{Accessor}
- \label Syntax::
- \DefunWithValues symbol-plist {symbol} {plist}
- \Defsetf symbol-plist {symbol} {new-plist}
- \label Arguments and Values::
- \param{symbol}---a \term{symbol}.
- \param{plist}, \param{new-plist}---a \term{property list}.
- \label Description::
- %% 10.1.0 14
- %% 10.1.0 16
- \term{Accesses} the \term{property list} of \param{symbol}.
- \label Examples::
- \code
- (setq sym (gensym)) \EV #:G9723
- (symbol-plist sym) \EV ()
- (setf (get sym 'prop1) 'val1) \EV VAL1
- (symbol-plist sym) \EV (PROP1 VAL1)
- (setf (get sym 'prop2) 'val2) \EV VAL2
- (symbol-plist sym) \EV (PROP2 VAL2 PROP1 VAL1)
- (setf (symbol-plist sym) (list 'prop3 'val3)) \EV (PROP3 VAL3)
- (symbol-plist sym) \EV (PROP3 VAL3)
- \endcode
- \label Side Effects:\None.
- \label Affected By:\None.
- \label Exceptional Situations::
- \Shouldchecktype{symbol}{a \term{symbol}}
- \label See Also::
- \funref{get},
- \funref{remprop}
- %!!! Barmar thinks there should be a concept section describing
- % the format of a plist.
- \label Notes::
- The use of \macref{setf} should be avoided, since a \term{symbol}'s
- \term{property list} is a global resource that can contain information
- established and depended upon by unrelated programs in the same \term{Lisp image}.
- \endcom
- %%% ========== SYMBOL-VALUE
- \begincom{symbol-value}\ftype{Accessor}
- \label Syntax::
- \DefunWithValues symbol-value {symbol} {value}
- \Defsetf symbol-value {symbol} {new-value}
- \label Arguments and Values::
- \param{symbol}---a \term{symbol} that must have a \term{value}.
- \param{value}, \param{new-value}---an \term{object}.
- \label Description::
- \term{Accesses} the \term{symbol}'s \term{value cell}.
- \label Examples::
- \code
- (setf (symbol-value 'a) 1) \EV 1
- (symbol-value 'a) \EV 1
- ;; SYMBOL-VALUE cannot see lexical variables.
- (let ((a 2)) (symbol-value 'a)) \EV 1
- (let ((a 2)) (setq a 3) (symbol-value 'a)) \EV 1
- ;; SYMBOL-VALUE can see dynamic variables.
- (let ((a 2))
- (declare (special a))
- (symbol-value 'a)) \EV 2
- (let ((a 2))
- (declare (special a))
- (setq a 3)
- (symbol-value 'a)) \EV 3
- (let ((a 2))
- (setf (symbol-value 'a) 3)
- a) \EV 2
- a \EV 3
- (symbol-value 'a) \EV 3
- (let ((a 4))
- (declare (special a))
- (let ((b (symbol-value 'a)))
- (setf (symbol-value 'a) 5)
- (values a b))) \EV 5, 4
- a \EV 3
- (symbol-value :any-keyword) \EV :ANY-KEYWORD
- (symbol-value 'nil) \EV NIL
- (symbol-value '()) \EV NIL
- ;; The precision of this next one is \term{implementation-dependent}.
- (symbol-value 'pi) \EV 3.141592653589793d0
- \endcode
- \label Side Effects:\None.
- \label Affected By::
- \funref{makunbound},
- \funref{set},
- \specref{setq}
- \label Exceptional Situations::
- \Shouldchecktype{symbol}{a \term{symbol}}
- Should signal \typeref{unbound-variable} if \param{symbol} is \term{unbound}
- and an attempt is made to \term{read} its \term{value}. (No such error is signaled
- on an attempt to \term{write} its \term{value}.)
- \label See Also::
- \funref{boundp}, \funref{makunbound}, \funref{set}, \specref{setq}
- \label Notes::
- \funref{symbol-value} can be used to get the value of a \term{constant variable}.
- %% 7.1.1 12
- \funref{symbol-value} cannot \term{access} the value of a \term{lexical variable}.
- \endcom
- %-------------------- Symbol Properties --------------------
- %%% ========== GET
- \begincom{get}\ftype{Accessor}
- \label Syntax::
- \DefunWithValues get {symbol indicator {\opt} default} {value}
- \Defsetf get {symbol indicator {\opt} default} {new-value}
- \label Arguments and Values::
- \param{symbol}---a \term{symbol}.
- \param{indicator}---an \term{object}.
- \param{default}---an \term{object}.
- \Default{\nil}
- \param{value}---if the indicated property exists,
- the \term{object} that is its \term{value};
- otherwise, the specified \param{default}.
- \param{new-value}---an \term{object}.
- \label Description::
- %% 10.1.0 8
- %% Barrett: Redundant with next paragraph.
- % \funref{get} searches the \term{property list} of \param{symbol} for an
- % indicator \funref{eq} to \param{indicator}.
- % \funref{get} returns the corresponding value of an indicator from
- % the \term{property list} of \param{symbol} \funref{eq} to \param{indicator},
- % if one is found.
- \funref{get} finds a \term{property}
- on the \term{property list}\meaning{2} of \param{symbol}
- whose \term{property indicator} is \term{identical} to \param{indicator},
- and returns its corresponding \term{property value}.
- \issue{PLIST-DUPLICATES:ALLOW}
- If there are multiple \term{properties}\meaning{1} with that \term{property indicator},
- \funref{get} uses the first such \term{property}.
- \endissue{PLIST-DUPLICATES:ALLOW}
- If there is no \term{property} with that \term{property indicator},
- \param{default} is returned.
- % %% 10.1.0 12
- % \macref{setf} may be used with \funref{get} to create a new property-value
- % pair, possibly replacing an old pair with the same property name.
- \macref{setf} of \funref{get} may be used to associate a new \term{object}
- with an existing indicator already on the \param{symbol}'s \term{property list},
- or to create a new assocation if none exists.
- \issue{PLIST-DUPLICATES:ALLOW}
- If there are multiple \term{properties}\meaning{1} with that \term{property indicator},
- \macref{setf} of \funref{get} associates the \param{new-value}
- with the first such \term{property}.
- \endissue{PLIST-DUPLICATES:ALLOW}
- \issue{SETF-GET-DEFAULT:EVALUATED-BUT-IGNORED}
- When a \funref{get} \term{form} is used as a \macref{setf} \param{place},
- any \param{default} which is supplied is evaluated according to normal
- left-to-right evaluation rules, but its \term{value} is ignored.
- \endissue{SETF-GET-DEFAULT:EVALUATED-BUT-IGNORED}
- \label Examples::
- \code
- (defun make-person (first-name last-name)
- (let ((person (gensym "PERSON")))
- (setf (get person 'first-name) first-name)
- (setf (get person 'last-name) last-name)
- person)) \EV MAKE-PERSON
- (defvar *john* (make-person "John" "Dow")) \EV *JOHN*
- *john* \EV #:PERSON4603
- (defvar *sally* (make-person "Sally" "Jones")) \EV *SALLY*
- (get *john* 'first-name) \EV "John"
- (get *sally* 'last-name) \EV "Jones"
- (defun marry (man woman married-name)
- (setf (get man 'wife) woman)
- (setf (get woman 'husband) man)
- (setf (get man 'last-name) married-name)
- (setf (get woman 'last-name) married-name)
- married-name) \EV MARRY
- (marry *john* *sally* "Dow-Jones") \EV "Dow-Jones"
- (get *john* 'last-name) \EV "Dow-Jones"
- (get (get *john* 'wife) 'first-name) \EV "Sally"
- (symbol-plist *john*)
- \EV (WIFE #:PERSON4604 LAST-NAME "Dow-Jones" FIRST-NAME "John")
- (defmacro age (person &optional (default ''thirty-something))
- `(get ,person 'age ,default)) \EV AGE
- (age *john*) \EV THIRTY-SOMETHING
- (age *john* 20) \EV 20
- (setf (age *john*) 25) \EV 25
- (age *john*) \EV 25
- (age *john* 20) \EV 25
- \endcode
- \label Side Effects:\None.
- \label Affected By:\None.
- \label Exceptional Situations::
- \Shouldchecktype{symbol}{a \term{symbol}}
- \label See Also::
- \funref{getf},
- \funref{symbol-plist},
- \funref{remprop}
- \label Notes::
- \code
- (get x y) \EQ (getf (symbol-plist x) y)
- \endcode
- \term{Numbers} and \term{characters} are not recommended for use
- as \param{indicators} in portable code since \funref{get} tests
- with \funref{eq} rather than \funref{eql}, and consequently
- the effect of using such \param{indicators} is
- \term{implementation-dependent}.
- % \code
- % (get 'clyde 'species) \EV NIL
- % (setf (get 'clyde 'species) 'elephant) \EV elephant
- % (get 'clyde 'species) \EV ELEPHANT
- % \endcode
- % \param{Default} may be supplied to \funref{get} in this context;
- % it is ignored by the \macref{setf} expander function
- % for \funref{get}, but
- % may be useful in such macros as \macref{push}
- % that are related to \macref{setf}:
- %
- % \code
- % (push item (get sym 'token-stack '(initial-item)))
- % \endcode
- % means approximately the same as
- %
- % \code
- % (setf (get sym 'token-stack '(initial-item))
- % (cons item (get sym 'token-stack '(initial-item))))
- % \endcode
- % which in turn would be treated as
- %
- % \code
- % (setf (get sym 'token-stack)
- % (cons item (get sym 'token-stack '(initial-item))))
- % \endcode
- %
- There is no way using \funref{get} to distinguish an absent property from
- one whose value is \param{default}. However, see \funref{get-properties}.
- % %% 10.1.0 15
- % Using \funref{get} on the result of \funref{symbol-plist} does not work;
- % the \term{symbol} itself must be given to \funref{get}. \funref{getf} can
- % be used to extract properties from a disembodied property list.
- \endcom
-
- %%% ========== REMPROP
- \begincom{remprop}\ftype{Function}
- \label Syntax::
- \DefunWithValues remprop {symbol indicator} {generalized-boolean}
- \label Arguments and Values::
- \param{symbol}---a \term{symbol}.
- \param{indicator}---an \term{object}.
- \param{generalized-boolean}---a \term{generalized boolean}.
- \label Description::
- %% 10.1.0 13
- \funref{remprop} removes from the \term{property list}\meaning{2} of \param{symbol}
- a \term{property}\meaning{1} with a \term{property indicator}
- % EQ => identical -kmp 14-Jul-93
- \term{identical} to \param{indicator}.
- \issue{PLIST-DUPLICATES:ALLOW}
- If there are multiple \term{properties}\meaning{1} with the \term{identical} key,
- \macref{remprop} only removes the first such \term{property}.
- \endissue{PLIST-DUPLICATES:ALLOW}
- \macref{remprop} returns \term{false} if no such \term{property} was found,
- or \term{true} if a property was found.
- The \term{property indicator}
- and the corresponding \term{property value}
- are removed in an undefined order
- by destructively splicing the property list.
- \issue{REMF-DESTRUCTION-UNSPECIFIED:X3J13-MAR-89}
- The permissible side-effects correspond to those permitted for \macref{remf},
- such that:
- \code
- (remprop \i{x} \i{y}) \EQ (remf (symbol-plist \i{x}) \i{y})
- \endcode
- \endissue{REMF-DESTRUCTION-UNSPECIFIED:X3J13-MAR-89}
- \label Examples::
- \code
- (setq test (make-symbol "PSEUDO-PI")) \EV #:PSEUDO-PI
- (symbol-plist test) \EV ()
- (setf (get test 'constant) t) \EV T
- (setf (get test 'approximation) 3.14) \EV 3.14
- (setf (get test 'error-range) 'noticeable) \EV NOTICEABLE
- (symbol-plist test)
- \EV (ERROR-RANGE NOTICEABLE APPROXIMATION 3.14 CONSTANT T)
- (setf (get test 'approximation) nil) \EV NIL
- (symbol-plist test)
- \EV (ERROR-RANGE NOTICEABLE APPROXIMATION NIL CONSTANT T)
- (get test 'approximation) \EV NIL
- (remprop test 'approximation) \EV \term{true}
- (get test 'approximation) \EV NIL
- (symbol-plist test)
- \EV (ERROR-RANGE NOTICEABLE CONSTANT T)
- (remprop test 'approximation) \EV NIL
- (symbol-plist test)
- \EV (ERROR-RANGE NOTICEABLE CONSTANT T)
- (remprop test 'error-range) \EV \term{true}
- (setf (get test 'approximation) 3) \EV 3
- (symbol-plist test)
- \EV (APPROXIMATION 3 CONSTANT T)
- \endcode
- \label Side Effects::
- The \term{property list} of \param{symbol} is modified.
- \label Affected By:\None.
- \label Exceptional Situations::
- \Shouldchecktype{symbol}{a \term{symbol}}
- \label See Also::
- \macref{remf}, \funref{symbol-plist}
- \label Notes::
- \term{Numbers} and \term{characters} are not recommended for use as
- \param{indicators} in portable code since \funref{remprop} tests with
- \funref{eq} rather than \funref{eql}, and consequently the effect of
- using such \param{indicators} is \term{implementation-dependent}.
- Of course, if you've gotten as far as needing to remove such a
- \term{property}, you don't have much choice---the time to have been
- thinking about this was when you used \macref{setf} of \macref{get} to
- establish the \term{property}.
- %Barrett: Bletch.
- \endcom
- %-------------------- Symbol Function/Value --------------------
- %%% ========== BOUNDP
- \begincom{boundp}\ftype{Function}
- \label Syntax::
- \DefunWithValues boundp {symbol} {generalized-boolean}
- \label Arguments and Values::
- \param{symbol}---a \term{symbol}.
- \param{generalized-boolean}---a \term{generalized boolean}.
- \label Description::
- %% 7.1.1 18
- \Predicate{symbol}{\term{bound}}
- \label Examples::
- \code
- (setq x 1) \EV 1
- (boundp 'x) \EV \term{true}
- (makunbound 'x) \EV X
- (boundp 'x) \EV \term{false}
- (let ((x 2)) (boundp 'x)) \EV \term{false}
- (let ((x 2)) (declare (special x)) (boundp 'x)) \EV \term{true}
- \endcode
- \label Affected By:\None.
- \label Exceptional Situations::
- \Shouldchecktype{symbol}{a \term{symbol}}
- \label See Also::
- \funref{set},
- \specref{setq},
- \funref{symbol-value},
- \funref{makunbound}
- \label Notes::
- % I see no lexical environment here. --sjl 16 Mar 92
- %The \term{lexical environment} is ignored.
- \Thefunction{bound} determines only whether a \term{symbol} has a
- value in the \term{global environment}; any \term{lexical bindings}
- are ignored.
- \endcom
- %%% ========== MAKUNBOUND
- \begincom{makunbound}\ftype{Function}
- %!!! Barmar thinks that fmakunbound should move to dict-functions.
- \label Syntax::
- \DefunWithValues makunbound {symbol} {symbol}
- \label Arguments and Values::
- \param{symbol}---a \term{symbol}
- \label Description::
- Makes the \param{symbol} be \term{unbound},
- regardless of whether it was previously \term{bound}.
- \label Examples::
- \code
- (setf (symbol-value 'a) 1)
- (boundp 'a) \EV \term{true}
- a \EV 1
- (makunbound 'a) \EV A
- (boundp 'a) \EV \term{false}
- \endcode
- \label Side Effects::
- The \term{value cell} of \param{symbol} is modified.
- \label Affected By:\None.
- \label Exceptional Situations::
- \Shouldchecktype{symbol}{a \term{symbol}}
- \label See Also::
- \funref{boundp}, \funref{fmakunbound}
- \label Notes:\None.
- \endcom
- %%% ========== SET
- \begincom{set}\ftype{Function}
- \label Syntax::
- \DefunWithValues set {symbol value} {value}
- \label Arguments and Values::
- \param{symbol}---a \term{symbol}.
- %% 7.1.2 9
- \issue{ARGUMENTS-UNDERSPECIFIED:SPECIFY}
- \param{value}---an \term{object}.
- \endissue{ARGUMENTS-UNDERSPECIFIED:SPECIFY}
- \label Description::
- %% 7.1.2 8
- \funref{set} changes the contents of the \term{value cell} of \term{symbol}
- to the given \term{value}.
- \code
- (set \param{symbol} \param{value}) \EQ (setf (symbol-value \param{symbol}) \param{value})
- \endcode
- \label Examples::
- \code
- (setf (symbol-value 'n) 1) \EV 1
- (set 'n 2) \EV 2
- (symbol-value 'n) \EV 2
- (let ((n 3))
- (declare (special n))
- (setq n (+ n 1))
- (setf (symbol-value 'n) (* n 10))
- (set 'n (+ (symbol-value 'n) n))
- n) \EV 80
- n \EV 2
- (let ((n 3))
- (setq n (+ n 1))
- (setf (symbol-value 'n) (* n 10))
- (set 'n (+ (symbol-value 'n) n))
- n) \EV 4
- n \EV 44
- (defvar *n* 2)
- (let ((*n* 3))
- (setq *n* (+ *n* 1))
- (setf (symbol-value '*n*) (* *n* 10))
- (set '*n* (+ (symbol-value '*n*) *n*))
- *n*) \EV 80
- *n* \EV 2
- (defvar *even-count* 0) \EV *EVEN-COUNT*
- (defvar *odd-count* 0) \EV *ODD-COUNT*
- (defun tally-list (list)
- (dolist (element list)
- (set (if (evenp element) '*even-count* '*odd-count*)
- (+ element (if (evenp element) *even-count* *odd-count*)))))
- (tally-list '(1 9 4 3 2 7)) \EV NIL
- *even-count* \EV 6
- *odd-count* \EV 20
- \endcode
- \label Side Effects::
- The \term{value} of \param{symbol} is changed.
- \label Affected By:\None.
- \label Exceptional Situations:\None.
- \label See Also::
- \specref{setq}, \specref{progv}, \funref{symbol-value}
- \label Notes::
- The function \funref{set} is deprecated.
- %% 7.1.2 11
- \funref{set} cannot change the value of a \term{lexical variable}.
- \endcom
- %-------------------- Symbol Errors --------------------
- \begincom{unbound-variable}\ftype{Condition Type}
- \label Class Precedence List::
- \typeref{unbound-variable},
- \typeref{cell-error},
- \typeref{error},
- \typeref{serious-condition},
- \typeref{condition},
- \typeref{t}
- \label Description::
- \Thetype{unbound-variable} consists of \term{error} \term{conditions}
- that represent attempts to \term{read} the \term{value} of an \term{unbound variable}.
- %Barrett: "name"?
- %KMP: An "unbound variable" is by definition just a "name". See glossary.
- The name of the cell (see \typeref{cell-error}) is the \term{name} of the
- \term{variable} that was \term{unbound}.
- \label See Also::
- \funref{cell-error-name}
- \endcom%{unbound-variable}\ftype{Condition Type}
|