\documentstyle{article}
\begin{document}
\title{The SACLIB List processing System}
\author{George E. Collins}
\maketitle

In SACLIB many arithmetic and algebraic objects are represented
as lists.  SACLIB contains its own list processing system,
consisting of certain conventions and a number of programs.
Here we present a brief description of this system.  Further
information can be found in the SACLIB 1.1 User's Guide.  A
dvi file for this user's guide is the file desc.doc in 
/usa/saclib/saclib2.1/doc.

All SACLIB lists are constructed from small integers called
$\beta$-integers.  $\beta$ is a SACLIB implementation parameter
whose value is kept in the global variable BETA.  In most
impleementations running on 32-bit architectures, including
the University of Delaware implementation, $\beta = 2^{29} =
536870912$.  A {\em $\beta$-integer} is any integer that is less
than $\beta$ in absolute value.  $\beta$-integers are also
called {\em atoms} because they are the unstructured
objects from which lists are constructed.  Abstractly,
without regard for computer memory representation, lists are
synonymous with finite sequences.  And elements of finite
sequences may themselves be finite sequences.  By such
considerations we arrive at the following recursive definition 
of a list.

\begin{itemize}
\begin{enumerate}
\item Every atom is an object.
\item Any finite sequence of objects is an object.
\item A list is any object that is not an atom.
\end{enumerate}
\end{itemize}

Note well that that the finite sequence of length zero is permitted;
it is called the null list.

List representations are constituted of list cells.  Each list cell
consists of two consecutive elements of an array of integers that
is called the space array.  This array is a global variable with
the designation SPACE.  A list cell has two fields, its {\em element}
field and its {\em reductum} field.  The reductum field is a pointer
field.  The element field contains either an atom or a pointer to
another list.  The pointers being considered are not C pointers but
SACLIB list pointers.  A SACLIB list pointer is either $\beta$ or
$\beta$ plus the index in the array SPACE of a cell.  The index of
a cell is the index of its first word.  The SACLIB pointer $\beta$
is a pointer to the null list.  Notice that SACLIB pointers are
therefore integers greater than or equal to $\beta$, which cannot
be confused with atoms.

Chapter 2 of the SACLIB User's Guide contains further information
about the SACLIB list processing system, including brief descriptions
of the many SACLIB programs available for performing elementary
operations on lists, including their construction, input and output.

\end{document}
