]> gitweb.factorcode.org Git - factor.git/commitdiff
more handbook updates
authorSlava Pestov <slava@factorcode.org>
Wed, 31 Aug 2005 06:34:09 +0000 (06:34 +0000)
committerSlava Pestov <slava@factorcode.org>
Wed, 31 Aug 2005 06:34:09 +0000 (06:34 +0000)
doc/handbook.tex

index 3ab2d184ac3d8a8e3d1768d1a9d79f0c08535aa9..e9a52606638c759fa634e83f3b0bdf8281667ed4 100644 (file)
@@ -4125,6 +4125,55 @@ treated as a matrix with one column.
 Applies a matrix to a vector on the left, as a linear transformation. The vector is
 treated as a matrix with one row.
 
+\section{Converting between numbers and strings}\label{parsing-numbers}
+
+Two sets of words convert between numbers and strings.
+
+\wordtable{
+\vocabulary{math}
+\ordinaryword{string>number}{string>number~( string -- number )}
+}
+Attempts to parse the string as a number. An exception is thrown if the string does not represent a number in one of the following forms:
+\begin{itemize}
+\item An integer; see \ref{integer-literals}
+\item A ratio; see \ref{ratio-literals}
+\item A float; see \ref{float-literals}
+\end{itemize}
+In particular, complex numbers are parsed by the \verb|#{| and \verb|}#| parsing words, not by the number parser. To parse complex number literals, use the \texttt{parse} word (\ref{parsing-quotations}).
+\wordtable{
+\vocabulary{math}
+\genericword{base>}{base>~( string base -- integer )}
+}
+Converts a string representation of an integer in the given base into an integer. Throws an exception if the string is not a valid representation of an integer.
+\wordtable{
+\vocabulary{math}
+\ordinaryword{bin>}{bin>~( string -- integer )}
+\ordinaryword{oct>}{oct>~( string -- integer )}
+\ordinaryword{dec>}{dec>~( string -- integer )}
+\ordinaryword{hex>}{hex>~( string -- integer )}
+}
+Convenience words defined in terms of \texttt{base>} for parsing integers in base 2, 8, 10 and 16, respectively.
+
+\wordtable{
+\vocabulary{math}
+\genericword{number>string}{number>string~( number -- string~)}
+}
+Outputs a string representation of a number. As with \verb|string>number|, only real numbers are supported. Printing complex numbers requires the more general prettyprinter facility (see \ref{prettyprint}).
+A set of words are provided for converting integers into strings with various bases.
+\wordtable{
+\vocabulary{unparser}
+\ordinaryword{>base}{>base~( integer base -- string~)}
+}
+Converts the integer into a string representation in the given base. The base must be between 2 and 36, inclusive.
+\wordtable{
+\vocabulary{unparser}
+\ordinaryword{>bin}{>bin~( integer -- string~)}
+\ordinaryword{>oct}{>oct~( integer -- string~)}
+\ordinaryword{>dec}{>dec~( integer -- string~)}
+\ordinaryword{>hex}{>hex~( integer -- string~)}
+}
+Convenience words defined in terms of \texttt{>base} for converting integers into string representations in base 2, 8, 10 and 16, respectively.
+
 \chapter{Streams}
 \glossary{name=stream,
 description={a source or sink of characters supporting some subset of the stream protocol, used as an end-point for input/output operations}}
@@ -4598,57 +4647,16 @@ M: tex-stream stream-format ( string attrs stream -- )
     ] with-wrapper ;
 \end{verbatim}
 
-\section{Printing objects}
+\section{Printing objects}\label{prettyprint}
 
 \glossary{name=prettyprinter,
 description={a set of words for printing objects in readable form}}
 
 One of Factor's key features is the ability to print almost any object in a readable form. This greatly aids debugging and provides the building blocks for light-weight object serialization facilities.
 
-\subsection{The unparser}
-
-The unparser provides a basic facility for turning certain types of objects into strings. A more general facility supporting more types is the prettyprinter (\ref{prettyprint}).
-\glossary{
-name=unreadable string,
-description={a string which raises a parse error when parsed}}
-\glossary{
-name=readable form,
-description={a readable form of an object is a string that parses to that object}}
-
-\wordtable{
-\vocabulary{unparser}
-\genericword{unparse}{unparse~( object -- string~)}
-}
-Outputs a string representation of \texttt{object}. Only the following classes of objects are supported; for anything else, an unreadable string is output:
-\begin{verbatim}
-boolean
-dll
-number
-sbuf
-string
-word
-\end{verbatim}
-A set of words are provided for converting integers into strings with various bases.
-\wordtable{
-\vocabulary{unparser}
-\ordinaryword{>base}{>base~( n base -- string~)}
-}
-Converts \texttt{n} into a string representation in the given base. The base must be between 2 and 36, inclusive.
-\wordtable{
-\vocabulary{unparser}
-\ordinaryword{>bin}{>bin~( n -- string~)}
-\ordinaryword{>oct}{>oct~( n -- string~)}
-\ordinaryword{>dec}{>dec~( n -- string~)}
-\ordinaryword{>hex}{>hex~( n -- string~)}
-}
-Convenience words defined in terms of \texttt{>base} for converting integers into string representations in base 2, 8, 10 and 16, respectively.
-
-\subsection{The prettyprinter}\label{prettyprint}
-
 \wordtable{
 \vocabulary{prettyprint}
-\ordinaryword{prettyprint}{prettyprint~( object --~)}
-
+\ordinaryword{.}{.~( object --~)}
 }
 Prints the object using literal syntax that can be parsed back again. Even though the prettyprinter supports more classes of objects than \texttt{unparse}, it is still not a general serialization mechanism. The following restrictions apply:
 
@@ -4660,124 +4668,74 @@ byte-array
 displaced-alien
 \end{verbatim}
 \item Shared structure is not reflected in the printed output; if the output is parsed back in, fresh objects are created for all literal denotations.
-\item Circular structure is not printed in a readable way. Circular references are printed as ``\texttt{\&}''.
+\item Circular structure is not printed in a readable way. Circular references are printed as ``\texttt{\#}''.
 \item Floating point numbers might not equal themselves after being printed and read, since a decimal representation of a float is inexact.
 \end{itemize}
 \wordtable{
 \vocabulary{prettyprint}
-\ordinaryword{.}{.~( object --~)}
-
+\ordinaryword{unparse}{unparse~( object --~string )}
 }
-Prettyprint the object, except all output is on a single line without indentation, and deeply-nested structure is not printed fully. This word is intended for interactive use at the listener.
+Prints the object to a string.
 \wordtable{
 \vocabulary{prettyprint}
-\ordinaryword{[.]}{[.]~( sequence --~)}
-
+\ordinaryword{short.}{short.~( object --~)}
 }
-Prettyprint each element of the sequence on its own line using the \texttt{.} word.
-
-\subsection{Variables controlling the prettyprinter}
-
-The following variables affect the prettyprinter if set in the dynamic scope from which \texttt{prettyprint} is called.
-
+Prettyprint the object, with nesting and length limits.
 \wordtable{
 \vocabulary{prettyprint}
-\symbolword{tab-size}
+\ordinaryword{unparse-short}{unparse-short~( object --~string )}
 }
-Specifies the indentation for recursive objects such as lists, vectors, hashtables and tuples. The default tab size is 4.
-
+Prints the object to a string with nesting and length limits.
 \wordtable{
 \vocabulary{prettyprint}
-\symbolword{prettyprint-limit}
+\ordinaryword{sequence.}{sequence.~( sequence --~)}
 }
-Controls the maximum nesting depth. Printing structures that nest further than this will simply print ``\texttt{\#}''. If this is set to \texttt{f}, the nesting depth is unlimited. The default is \texttt{f}. Inside calls to \texttt{.}, set to 16, which translates to four levels of nesting with the default tab size.
+Prettyprint each element of the sequence on its own line using the \verb|short.| word.
 
-\wordtable{
-\vocabulary{prettyprint}
-\symbolword{one-line}
-}
-If set to true, the prettyprinter does not emit newlines. The default is \texttt{f}. Inside calls to \texttt{.}, set to \texttt{t}.
-
-\subsection{Extending the prettyprinter}
+\subsection{Variables controlling the prettyprinter}
 
-If define your own data type and wish to add new syntax for it, you must implement two facilities:
-\begin{itemize}
-\item Parsing word(s) for reading your data type,
-\item A prettyprinter method for printing your data type.
-\end{itemize}
-Parsing words are documented in \ref{parsing-words}.
+The following variables affect the prettyprinter if set in the dynamic scope from which \texttt{prettyprint} is called.
 
 \wordtable{
 \vocabulary{prettyprint}
-\genericword{prettyprint*}{prettyprint* ( indent object -- indent )}
+\symbolword{tab-size}
 }
-Prettyprints the given object. Unlike \texttt{prettyprint}, this word does not emit a trailing newline, and the current indent level is given. This word is also generic, so you can add methods to have it print your own data types in a nice way.
+Specifies the indentation for recursive objects such as lists, vectors, hashtables and tuples. The default is 4.
 
-The remaining words in this section are useful in the implementation of prettyprinter methods.
 \wordtable{
 \vocabulary{prettyprint}
-\genericword{unparse.}{unparse.~( object -- )}
+\symbolword{margin}
 }
-Prints the textual representation of an object as returned by \verb|unparse|. Generally \texttt{prettyprint*} is used instead; one important distinction with \verb|unparse.| is that if the given object is a parsing word, the output is not prefixed with \texttt{POSTPONE:}.
+Specifies the maximum line length, in characters. Lines longer than the margin are wrapped. The default is 64.
+
 \wordtable{
 \vocabulary{prettyprint}
-\genericword{prettyprint-newline}{prettyprint-newline ( indent -- )}
+\symbolword{nesting-limit}
 }
-Emits a newline followed by the given amount of indentation.
+Specifies the maximum nesting level. Structures that nest further than this will simply print ``\texttt{\#}''. The default is \texttt{f}, which denotes unlimited nesting depth.
+
 \wordtable{
 \vocabulary{prettyprint}
-\genericword{?prettyprint-newline}{?prettyprint-newline ( indent -- )}
+\symbolword{length-limit}
 }
-If \texttt{one-line} is on, emits a space, otherwise, emits a newline followed by the given amount of indentation.
+Specifies the maximum sequence length. Sequences longer than this are truncated, and \verb|...| is output in place of remaining elements. The default is \texttt{f}, which denotes unlimited sequence length.
+
 \wordtable{
 \vocabulary{prettyprint}
-\genericword{<prettyprint}{<prettyprint~( indent -- indent )}
+\symbolword{line-limit}
 }
-Increases the indent level and emits a newline if \texttt{one-line} is off.
+Specifies the maximum lines of output. If more than this number of lines are printed, remaining output is truncated, and \verb|...| is output in place of remaining lines. The default is \texttt{f}, which denotes unlimited lines of output.
+
 \wordtable{
 \vocabulary{prettyprint}
-\genericword{prettyprint>}{prettyprint>~( indent -- indent )}
+\symbolword{string-limit}
 }
-Decreases the indent level and emits a newline if \texttt{one-line} is off.
+If set to \verb|t|, strings longer than the margin are truncated. Otherwise, strings are printed fully, regardless of length. The default is \verb|f|.
 
 \chapter{The parser}
 
 This section concerns itself with reflective access and extension of the parser. The parser algorithm and standard syntax is described in \ref{syntax}. Before the parser proper is documented, we draw attention to a set of words for parsing numbers. They are called by the parser, and are useful in their own right.
 
-\section{Parsing numbers}\label{parsing-numbers}
-
-\wordtable{
-\vocabulary{parser}
-\ordinaryword{str>number}{str>number~( string -- number )}
-}
-Attempts to parse the string as a number. An exception is thrown if the string does not represent a number in one of the following forms:
-\begin{itemize}
-\item An integer; see \ref{integer-literals}
-\item A ratio; see \ref{ratio-literals}
-\item A float; see \ref{float-literals}
-\end{itemize}
-In particular, complex numbers are parsed by the \verb|#{| and \verb|}#| parsing words, not by the number parser. To parse complex number literals, use the \texttt{parse} word (\ref{parsing-quotations}).
-\wordtable{
-\vocabulary{parser}
-\ordinaryword{parse-number}{parse-number~( string -- number/f )}
-}
-Like \texttt{str>number}, except instead of raising an error, outputs \texttt{f} if the string is not a valid literal number.
-\wordtable{
-\vocabulary{parser}
-\genericword{base>}{base>~( string base -- integer )}
-}
-Converts a string representation of an integer in the given base into an integer. Throws an exception if the string is not a valid representation of an integer.
-\wordtable{
-\vocabulary{parser}
-\ordinaryword{bin>}{bin>~( string -- integer )}
-\ordinaryword{oct>}{oct>~( string -- integer )}
-\ordinaryword{dec>}{dec>~( string -- integer )}
-\ordinaryword{hex>}{hex>~( string -- integer )}
-}
-Convenience words defined in terms of \texttt{base>} for parsing integers in base 2, 8, 10 and 16, respectively.
-
-\section{Parsing quotations}\label{parsing-quotations}
-
 As documented in \ref{vocabsearch}, the parser looks up words in the vocabulary search path. New word definitions are added to the current vocabulary. These two parameters are stored in a pair of variables (\ref{namespaces}):
 \begin{description}
 \item[\texttt{"use"}] the vocabulary search path; a list of strings