Documentation for the new module language from S48.

This commit is contained in:
mainzelm 2002-04-19 13:17:46 +00:00
parent 0a8e312756
commit 00319ca983
1 changed files with 60 additions and 13 deletions

View File

@ -132,6 +132,14 @@ The configuration language consists of top-level defining forms for
\>\altz{}~ \tt(\syn{name} \syn{type}) \\
\>\altz{}~ \tt((\arbno{\syn{name}}) \syn{type}) \\
\syn{structure} \=\goesto{}~ \syn{name} \\
\>\altz{}~ \tt(modify \syn{structure} \arbno{\syn{modifier}}) \\
\>\altz{}~ \tt(subset \syn{structure} (\arbno{\syn{name}})) \\
\>\altz{}~ \tt(with-prefix \syn{structure} \syn{name}) \\
\syn{modifier} \=\goesto{}~ \tt(expose \arbno{\syn{name}}) \\
\>\altz{}~ \tt(hide \arbno{\syn{name}}) \\
\>\altz{}~ \tt(rename \arbno{(\syn{name}$_0$ \syn{name}$_1$)}) \\
\>\altz{}~ \tt(alias \arbno{(\syn{name}$_0$ \syn{name}$_1$)}) \\
\>\altz{}~ \tt(prefix \syn{name}) \\
\end{tabbing}
\caption{The configuration language.}
\end{figure}
@ -156,19 +164,58 @@ For building structures that export structures, there is a {\tt defpackage}
Many other structures, such as record and hash table facilities, are also
available in the \hack{} implementation.
An {\tt access} clause specifies which bindings of names to structures
will be visible inside the package body for use in {\tt structure-ref}
forms. {\tt structure-\ok{}ref} has the following syntax:
\begin{tabbing}
\qquad \syn{expression} \goesto{}~
\tt(structure-ref \syn{struct-name} \syn{name})
\end{tabbing}
The \syn{struct-name} must be the name of an {\tt access}ed structure,
and \syn{name} must be something that the structure exports. Only
structures listed in an {\tt access} clause are valid in a {\tt
structure-ref}. If a package accesses any structures, it should
probably open the {\tt structure-refs} structure so that the {\tt
structure-ref} operator itself will be available.
The \codemainindex{{modify}}, \codemainindex{{subset}}, and
\codemainindex{{prefix}} forms produce new
views on existing structures by renaming or hiding exported names.
\code{Subset} returns a new structure that exports only the listed names
from its \syn{structure} argument.
\code{With-prefix} returns a new structure that adds \syn{prefix}
to each of the names exported by the \syn{structure} argument.
For example, if structure \code{s} exports \code{a} and \code{b},
then
\begin{example}
(subset s (a))
\end{example}
exports only \code{a} and
\begin{example}
(with-prefix s p/)
\end{example}
exports \code{a} as \code{p/a} and \code{b} as \code{p/b}.
Both \code{subset} and \code{with-prefix} are simple macros that
expand into uses of \code{modify}, a more general renaming form.
In a \code{modify} structure specification the \syn{command}s are applied to
the names exported
by \syn{structure} to produce a new set of names for the \syn{structure}'s
bindings.
\code{Expose} makes only the listed names visible.
\code{Hide} makes all but the listed names visible.
\code{Rename} makes each \syn{name}$_0$ visible as \syn{name}$_1$
name and not visible as \syn{name}$_0$ , while
\code{alias} makes each \syn{name}$_0$ visible as both \syn{name}$_0$
and \syn{name}$_1$.
\code{Prefix} adds \syn{name} to the beginning of each exported name.
The modifiers are applied from right to left. Thus
\begin{example}
(modify scheme (prefix foo/) (rename (car bus))))
\end{example}
makes \code{car} available as \code{foo/bus}..
% Use modify instead of structure-ref.
%
%An {\tt access} clause specifies which bindings of names to structures
%will be visible inside the package body for use in {\tt structure-ref}
%forms. {\tt structure-\ok{}ref} has the following syntax:
%\begin{tabbing}
%\qquad \syn{expression} \goesto{}~
% \tt(structure-ref \syn{struct-name} \syn{name})
%\end{tabbing}
%The \syn{struct-name} must be the name of an {\tt access}ed structure,
%and \syn{name} must be something that the structure exports. Only
%structures listed in an {\tt access} clause are valid in a {\tt
%structure-ref}. If a package accesses any structures, it should
%probably open the {\tt structure-refs} structure so that the {\tt
%structure-ref} operator itself will be available.
The package's body is specified by {\tt begin} and/or {\tt files}
clauses. {\tt begin} and {\tt files} have the same semantics, except