\begindata{text,538387096}
\textdsversion{12}
\template{help}
\define{global
}
\chapter{BGLisp

A Bare-Bones Lisp Interpreter based on ELI, the Embedded Lisp Interpreter

}
\section{What BGLisp is

}\leftindent{
BGLisp is an interactive Lisp interpreter which deliberately omits certain 
features of other Lisp interpreters for the sake of speed.  BGLisp is an 
interface to ELI, the Embedded Lisp Interpreter, which is the same Lisp 
that FLAMES (the Filtering Language for the Andrew Message System) uses. 
 BGLisp is therefore a useful utility for testing FLAMES code before 
putting it into actual use.

}
\section{Starting BGLisp

}\leftindent{
BGLisp can be started by typing \



\leftindent{\bold{bglisp }}\



at the command prompt.  A brief introduction will be displayed along with a 
prompt.  Lisp expressions are entered at the prompt, where they are 
evaluated and displayed.  \



To exit BGLisp, type \typewriter{^D} (control-D) at the BGLisp prompt.

}
\section{Warnings

}\leftindent{
As mentioned above, BGLisp is a very stripped-down Lisp interpreter.  Some 
fairly common Lisp features which are not supported are: \



\leftindent{macros

destructive list operations

dotted pairs

the "go" function}


Also, the interpreter itself lacks a "break" loop, which in other 
interpreters allows the user to examine and modify faulty Lisp expressions 
when their evaluation fails. \



Finally, some Lisp interpreters indicate the current level of 
parenthesization when the user puts a newline in the middle of a Lisp 
expression.  Although BGLisp allows newlines to be embedded in 
parenthesized expressions, it will not indicate how many parentheses remain 
to be closed, nor will it offer additional prompts on each line until after 
the current expression has been completely entered and evaluated.

}
\section{How BGLisp works

}
\leftindent{BGLisp is basically a standard Lisp interpreter, minus certain 
features which are not strictly necessary (as they can be simulated using 
existing features), and whose absence speeds up BGLisp tremendously in 
comparison to other Lisps.  Most of BGLisp works like Common Lisp; the 
curious novice is referred to the excellent text, \italic{Common Lisp: The 
Language}, by Guy Steele, Jr.  Certain BGLisp functions behave in ways 
either slightly or very different from their Common Lisp counterparts.  See 
the file \



\leftindent{/usr/andrew/doc/eli/procs.doc}


for complete documentation for all BGLisp functions.


BGLisp supports the following types of expressions:


\indent{\description{\bold{Integers}.  A BGLisp integer consists of an 
optional plus- or minus-sign, followed by a string of digits.


\bold{Strings}.  A BGLisp string is introduced and ended with a 
quotation-mark (").  Within the string, certain "escapes" are recognized. 
 For instance, \\n within the string places a new-line, \\" places a 
quotation-mark, \\\\ places a single backslash (\\), etc.  All of the 
standard `C' backslash-escapes are recognized.


\bold{Symbols}.  A symbol is any sequence of characters that does not 
include whitespace, parentheses, backward- or forward-apostrophes, commas, 
quotation-marks or semi-colons.  Note that a symbol may begin with or 
contain any number of digits; however, if it contains \italic{only} digits, 
it will be interpreted as an integer.


\bold{Lists}.  A list begins with a left-parenthesis, ends with a 
right-parenthesis, and contains zero-or-more expressions, which may be of 
any type (integers, strings, symbols, lists).  The construct 
\typewriter{'expression} (where expression is any type of BGLisp 
expression) is shorthand for \typewriter{(QUOTE expression)}.}}


BGLisp also incorporates a library facility via the LOAD function.  This 
function searches the sequence of directories given in your *.elipath 
preference for a file that you name.  See the section on "Preferences" 
below, and the documentation for the LOAD function in procs.doc.

}
\section{Using BGLisp

}
\leftindent{To start BGLisp, type \typewriter{bglisp} at the command 
prompt.  You will be greeted with a brief introductory message, and then 
the BGLisp prompt ("BGLisp>") will appear.  You may enter a Lisp expression 
at this prompt.  When you hit the ENTER key, it will be evaluated, and the 
result will be displayed.  If the expression you are entering is a list, 
the expression will not be evaluated until the last parenthesis is closed 
and the ENTER key is depressed.  This allows you to embed carriage-returns 
within the expression for readability.  You may also embed spaces and tabs 
to your heart's content.  Finally, placing a semi-colon (;) on a line tells 
BGLisp to ignore the remainder of the line until the next carriage-return. 
 Everything on a line after a semi-colon is a comment.  To end the session 
of BGLisp, type \typewriter{^D} (control-D) at the BGLisp prompt.

}
\section{Classifying mail

}
\leftindent{As mentioned above, BGLisp uses the same internal Lisp 
interpreter used by FLAMES, the Filtering Language for the Andrew MEssage 
System.  FLAMES allows you to automatically classify incoming mail; see the 
 \italic{\helptopic{flames}}  help file to learn more about FLAMES.  Using 
BGLisp, you can test your FLAMES functions before they are put into actual 
use.  The ELI library \



\leftindent{/usr/andrew/lib/eli/flames.eli }\



contains Lisp functions to help in testing FLAMES functions.  To load these 
functions, type \typewriter{(load "flames")} while in BGLisp.  Again, see 
the file


\leftindent{/usr/andrew/doc/ams/Flames.pgr}


to learn more about testing FLAMES functions in BGLisp.

}
\section{Preferences

}
\leftindent{The elipath preference in your preferences file is a 
colon-separated list of directories that BGLisp will search when trying to 
load ELI libraries.  You may not need this preference if you only intend to 
use libraries in /usr/andrew/lib/eli; however, if you wish to search other 
directories, you may wish to add this preference.  If your preferences file 
contains the line


\display{elipath: /afs/andrew/usr/bobg/lib/eli:/usr/andrew/lib/eli}


then when you execute the BGLisp "load" function, first the directory 
/afs/andrew/usr/bobg/lib/eli will be checked for the library you wish to 
load; if it is not found there, the directory /usr/andrew/lib/eli will be 
checked.

}
\section{Quick reference

}\leftindent{
To start BGLisp, type \typewriter{bglisp} at the command prompt.  To exit 
BGLisp, type \typewriter{^D} (control-D) at the BGLisp prompt.  There are a 
number of command-line switches that you can give to BGLisp; you probably 
don't need any of them.  They are:


\display{\description{\bold{-r}  This causes BGLisp to print out technical 
statistics about various Lisp objects in use after each Lisp expression is 
evaluated.


\bold{-t}  This causes BGLisp to run in "terse" mode; no prompts or 
messages are printed, only the results of evaluations.


\bold{-f}  This causes BGLisp to "free" certain chunks of memory that it 
uses, when that memory is not in use.  This may slow BGLisp down a bit, but 
may make it slightly more memory-efficient.


\bold{-m}  This causes BGLisp to use an alternate memory-usage scheme.  The 
one that it uses by default is just fine; stick with that one.}}

}
\section{Program Author}

\leftindent{
Bob Glickstein

}
\section{Related tools}  \



Select (highlight) one of the italicized names and choose "Show Help on 
Selected Word" from the pop-up menu to see the help file for:


\leftindent{\italic{\helptopic{flames}

\helptopic{eli}}}


\begindata{bp,538210560}
\enddata{bp,538210560}
\view{bpv,538210560,0,0,0}
Copyright 1992 Carnegie Mellon University and IBM.  All rights reserved.

\smaller{\smaller{$Disclaimer: 

Permission to use, copy, modify, and distribute this software and its 

documentation for any purpose is hereby granted without fee, 

provided that the above copyright notice appear in all copies and that 

both that copyright notice, this permission notice, and the following 

disclaimer appear in supporting documentation, and that the names of 

IBM, Carnegie Mellon University, and other copyright holders, not be 

used in advertising or publicity pertaining to distribution of the software 

without specific, written prior permission.



IBM, CARNEGIE MELLON UNIVERSITY, AND THE OTHER COPYRIGHT HOLDERS 

DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING 

ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO EVENT 

SHALL IBM, CARNEGIE MELLON UNIVERSITY, OR ANY OTHER COPYRIGHT HOLDER 

BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY 

DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, 

WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS 

ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 

OF THIS SOFTWARE.

 $

}}\enddata{text,538387096}