123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- % -*- Mode: TeX -*-
- \beginsubsection{Loading}
- %% 23.4.0 1
- To \funref{load} a \term{file} is to treat its contents as \term{code}
- and \term{execute} that \term{code}.
- The \term{file} may contain \newterm{source code} or \newterm{compiled code}.
- A \term{file} containing \term{source code} is called a \newterm{source file}.
- \term{Loading} a \term{source file} is accomplished essentially
- by sequentially \term{reading}\meaning{2} the \term{forms} in the file,
- \term{evaluating} each immediately after it is \term{read}.
- %% 23.4.0 2
- A \term{file} containing \term{compiled code} is called a \newterm{compiled file}.
- \term{Loading} a \term{compiled file} is similar to \term{loading} a \term{source file},
- except that the \term{file} does not contain text but rather an
- \term{implementation-dependent} representation of pre-digested \term{expressions}
- created by the \term{compiler}. Often, a \term{compiled file} can be \term{loaded}
- more quickly than a \term{source file}.
- \Seesection\Compilation.
- The way in which a \term{source file} is distinguished from a \term{compiled file}
- is \term{implementation-dependent}.
- \endsubsection%{Loading}
- \beginsubsection{Features}
- \DefineSection{Features}
- A \newterm{feature} is an aspect or attribute
- of \clisp,
- of the \term{implementation},
- or of the \term{environment}.
- A \term{feature} is identified by a \term{symbol}.
- A \term{feature} is said to be \newterm{present} in a \term{Lisp image}
- if and only if the \term{symbol} naming it is an \term{element} of the
- \term{list} held by \thevariable{*features*},
- which is called the \newterm{features list}.
- \beginsubsubsection{Feature Expressions}
- \DefineSection{FeatureExpressions}
- Boolean combinations of \term{features}, called \newtermidx{feature expressions}{feature expression},
- are used by the \f{\#+} and \f{\#-} \term{reader macros} in order to
- direct conditional \term{reading} of \term{expressions} by the \term{Lisp reader}.
- The rules for interpreting a \term{feature expression} are as follows:
- \beginlist
- \itemitem{\term{feature}}
- If a \term{symbol} naming a \term{feature} is used as a \term{feature expression},
- the \term{feature expression} succeeds if that \term{feature} is \term{present};
- otherwise it fails.
- \itemitem{\f{(not \param{feature-conditional})}}
- A \misc{not} \term{feature expression} succeeds
- if its argument \param{feature-conditional} fails;
- otherwise, it succeeds.
- \itemitem{\f{(and \starparam{feature-conditional})}}
- An \misc{and} \term{feature expression} succeeds
- if all of its argument \param{feature-conditionals} succeed;
- otherwise, it fails.
- \itemitem{\f{(or \starparam{feature-conditional})}}
- An \misc{or} \term{feature expression} succeeds
- if any of its argument \param{feature-conditionals} succeed;
- otherwise, it fails.
- \endlist
- \beginsubsubsubsection{Examples of Feature Expressions}
- \DefineSection{FeatureExpExamples}
- %% 22.1.4 40
- For example, suppose that
- in \term{implementation} A, the \term{features} \f{spice} and \f{perq} are \term{present},
- but the \term{feature} \f{lispm} is not \term{present};
- in \term{implementation} B, the feature \f{lispm} is \term{present},
- but the \term{features} \f{spice} and \f{perq} are
- not \term{present};
- and
- in \term{implementation} C, none of the features \f{spice}, \term{lispm}, or \f{perq} are
- \term{present}.
- \Thenextfigure\ shows some sample \term{expressions}, and how they would be
- \term{read}\meaning{2} in these \term{implementations}.
- \showtwo{Features examples}{
- \f{(cons \#+spice "Spice" \#-spice "Lispm" x)} \span \cr
- \noalign{\vskip 2pt}
- \quad in \term{implementation} A $\ldots$ & \f{(CONS "Spice" X)} \cr
- \quad in \term{implementation} B $\ldots$ & \f{(CONS "Lispm" X)} \cr
- \quad in \term{implementation} C $\ldots$ & \f{(CONS "Lispm" X)} \cr
- \noalign{\vskip 5pt}
- \f{(cons \#+spice "Spice" \#+LispM "Lispm" x)} \span \cr
- \noalign{\vskip 2pt}
- \quad in \term{implementation} A $\ldots$ & \f{(CONS "Spice" X)} \cr
- \quad in \term{implementation} B $\ldots$ & \f{(CONS "Lispm" X)} \cr
- \quad in \term{implementation} C $\ldots$ & \f{(CONS X)} \cr
- \noalign{\vskip 5pt}
- \f{(setq a '(1 2 \#+perq 43 \#+(not perq) 27))} \span \cr
- \noalign{\vskip 2pt}
- \quad in \term{implementation} A $\ldots$ & \f{(SETQ A '(1 2 43))} \cr
- \quad in \term{implementation} B $\ldots$ & \f{(SETQ A '(1 2 27))} \cr
- \quad in \term{implementation} C $\ldots$ & \f{(SETQ A '(1 2 27))} \cr
- \noalign{\vskip 5pt}
- \f{(let ((a 3) \#+(or spice lispm) (b 3)) (foo a))} \span \cr
- \noalign{\vskip 2pt}
- \quad in \term{implementation} A $\ldots$ & \f{(LET ((A 3) (B 3)) (FOO A))} \cr
- \quad in \term{implementation} B $\ldots$ & \f{(LET ((A 3) (B 3)) (FOO A))} \cr
- \quad in \term{implementation} C $\ldots$ & \f{(LET ((A 3)) (FOO A))} \cr
- \noalign{\vskip 5pt}
- \f{(cons \#+Lispm "\#+Spice" \#+Spice "foo" \#-(or Lispm Spice) 7 x)} \span \cr
- \noalign{\vskip 2pt}
- \quad in \term{implementation} A $\ldots$ & \f{(CONS "foo" X)} \cr
- \quad in \term{implementation} B $\ldots$ & \f{(CONS "\#+Spice" X)} \cr
- \quad in \term{implementation} C $\ldots$ & \f{(CONS 7 X)} \cr
- }
- \endsubsubsubsection%{Examples of Feature Expressions}
- \endsubsubsection%{Feature Expressions}
- \endsubsection%{Features}
|