summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2003-08-21 09:44:58 +0000
committerMartin Odersky <odersky@gmail.com>2003-08-21 09:44:58 +0000
commit8341c5c36e88000e24bfd26d62c98805fc96fdcf (patch)
treee79189602238f756f686bf7805d91289cbe22d2c /doc
parentda5c361c7af30fc25f542bad8e12f3fceefc144d (diff)
downloadscala-8341c5c36e88000e24bfd26d62c98805fc96fdcf.tar.gz
scala-8341c5c36e88000e24bfd26d62c98805fc96fdcf.tar.bz2
scala-8341c5c36e88000e24bfd26d62c98805fc96fdcf.zip
*** empty log message ***
Diffstat (limited to 'doc')
-rw-r--r--doc/reference/reference.verb.tex50
1 files changed, 19 insertions, 31 deletions
diff --git a/doc/reference/reference.verb.tex b/doc/reference/reference.verb.tex
index 0b1431cf83..dff170c2d7 100644
--- a/doc/reference/reference.verb.tex
+++ b/doc/reference/reference.verb.tex
@@ -2,7 +2,7 @@
\documentclass[11pt]{report}
-\usepackage{fleqn,a4wide,modefs,math,prooftree,scaladefs,vquote}
+\usepackage{fleqn,a4,modefs,math,prooftree,scaladefs,vquote}
\newcommand{\ifqualified}[1]{}
\newcommand{\iflet}[1]{}
@@ -20,10 +20,11 @@
Martin Odersky \\
Philippe Altherr \\
Vincent Cremet \\
-Burak Emir \\ \\
-St\'ephane Micheloud
+Burak Emir \\
+St\'ephane Micheloud \\
Nikolay Mihaylov \\
Michel Schinz \\
+Erik Stenman \\
Matthias Zenger
\\ \
\\
@@ -3052,28 +3053,15 @@ methods can be implemented in different ways for different carrier
types. As an example, an implementation of these methods for lists is
given in \sref{cls-list}.
-The translation scheme is by repeated applications of the following
-rules, until all comprehensions have been eliminated.
-
-First, a definition: A pattern \verb@p@ is a {\em irrefutable} if \verb@p@ is a
-variable pattern or a pattern \verb@scala.Tuple$\,n$(x$_1$, ..., x$_n$)@ where
-\verb@x$_1$, ..., x$_n$@ are variable patterns.
-In the following, we let \verb@p@ range over patterns,
-let \verb@q@ range over refutable patterns, and
-let \verb@e, f@ range over expressions.
-
-\begin{itemize}
-\item
-For a refutable pattern \verb@p@ with free variables
-\verb@x$_1$, ..., x$_n$@,
-the generator \verb@val p <- e@ is translated to:
+The translation scheme is as follows.
+In a first step, every generator \verb@val p <- e@, where \verb@p@ is not
+a pattern variable, is replaced by
\begin{verbatim}
-val Scala.Tuple$\,n$(x$_1$, ..., x$_n$) <-
- e\=.filter { case p => True case _ => False }
- \>.map{ case p => Tuple$\,n$(x$_1$, ..., x$_n$) } .
+val p <- e.filter { case p => true; case _ => false }
\end{verbatim}
-This yields a generator with an irrefutable pattern.
-
+Then, the following
+rules are applied repeatedly until all comprehensions have been eliminated.
+\begin{itemize}
\item
A generator \verb@q <- e@ followed by a filter \verb@f@ is translated to
a single generator \verb@q <- e.filter(x$_1$, ..., x$_n$ => f)@ where
@@ -3081,37 +3069,37 @@ a single generator \verb@q <- e.filter(x$_1$, ..., x$_n$ => f)@ where
\item
A for-comprehension
-\verb@for (val q <- e) yield e'@
+\verb@for (val p <- e) yield e'@
is translated to
-\verb@e.map { case q => e' }@.
+\verb@e.map { case p => e' }@.
\item
A for-comprehension
-\verb@for (val q <- e) do e'@
+\verb@for (val p <- e) do e'@
is translated to
-\verb@e.foreach { case q => e' }@.
+\verb@e.foreach { case p => e' }@.
\item
A for-comprehension
\begin{verbatim}
-for (val q <- e; val q' <- e' ...) yield e'' ,
+for (val p <- e; val p' <- e' ...) yield e'' ,
\end{verbatim}
where \verb@...@ is a (possibly empty)
sequence of generators or filters,
is translated to
\begin{verbatim}
-e.flatmap { case q => for (val q' <- e' ...) yield e'' } .
+e.flatmap { case p => for (val p' <- e' ...) yield e'' } .
\end{verbatim}
\item
A for-comprehension
\begin{verbatim}
-for (val q <- e; val q' <- e' ...) do e'' .
+for (val p <- e; val p' <- e' ...) do e'' .
\end{verbatim}
where \verb@...@ is a (possibly empty)
sequence of generators or filters,
is translated to
\begin{verbatim}
-e.foreach { case q => for (val q' <- e'...) do e'' } .
+e.foreach { case p => for (val p' <- e'...) do e'' } .
\end{verbatim}
\end{itemize}