scheme - UMB Scheme ($Revision: 3.2 $)
ORIGIN
University of Massachusetts at Boston
SYNOPSIS
scheme [file ...]
DESCRIPTION
UMB Scheme is an implementation of the language described
in the IEEE Standard for the Scheme Programming Language
(December, 1990). It also supports R4RS, relying on
Aubrey Jaffer's Scheme Portable Library (SLIB) for R4RS
macro support.
All syntax, variables and procedures are implemented.
Integers are implemented as fixnums and bignums, rationals
as pairs of integers, (inexact) reals as double-precision
floats, and (inexact) complex numbers as pairs of double-
precision floats.
The following files are loaded in order at startup:
If the variable SCHEME_INIT is set in the user's environ
ment by executing
setenv SCHEME_INIT file
then file is loaded.
If SCHEME_INIT is not set and if a file .scheme exists in
the user's home directory then it is loaded.
The files named as optional arguments are loaded from left
to right.
The primitive procedure edit may be used for editing files
during a scheme session.
(edit filename)
(edit)
Filename is a string object specifying the file to be
edited. If no filename is given then that file that was
most recently edited is assumed. The editor used is taken
from the shell variable, EDITOR, in the user's environ
ment; if this variable is not set then vi(1) is used by
default. The user can make sure EDITOR is always set by
putting a setenv in his .login file; e.g.
setenv EDITOR /usr/ucb/emacs
Upon leaving the editor, that file specified by filename
is automatically loaded using the primitive procedure
loadv, which causes the interpreter output to be sent to
verbose loading is not desired use the commands
(edits filename)
(edits)
causing filename to be loaded silently by the primitive
procedure load.
Load and loadv can be used to load any file in silent or
verbose mode respectively:
(load filename)
(loadv filename).
UMB Scheme has property lists:
(put symbol property-name object)
(get symbol property-name)
where property-names are symbols.
SCHEME PORTABLE LIBRARY
UMB Scheme can access Aubrey Jaffer's Scheme Portable
Library (SLIB). For documentation on SLIB see either
http://www.cs.indiana.edu/scheme-reposi
tory/SCM/slib_toc.html or /usr/local/lib/slib/slib.tex
info.
SYSTEM INTERFACE
UMB Scheme supports calls to the underlying system. The
call,
(system cmd-string)
where cmd-string is a string representing a system com
mand, causes that command to be passed to the underlying
operating system.
And,
(time)
returns the number of seconds since 00:00:00 GMT, Jan.
1, 1970.
DEFMACRO
UMB Scheme supports the standard defmacro facility. For
example, assuming quasi-quote notation, the definition
(defmacro := (lhs rhs)
defines a macro := that translates forms like
(:= a b) to (set! a b)
We rely on the Scheme Portable Library (SLIB) to provide
R4RS macros; to load this, type,
(require 'macro)
EVAL and ENVIRONMENTS
We implement environments as first-class Scheme objects
and introduce an explicit eval procedure. So,
(current-environment)
produces the environment in which the call was made. and,
(environment? obj)
produces #t iff obj is an environment object and #f other
wise. The call,
(global-environment obj)
produces #t iff obj is the environment object representing
the top-level global environment and #f otherwise. Envi
ronment objects are used by eval. The call,
(eval obj environment)
explicitly evaluates the given object in the given envi
ronment. For example,
(define env1 (current-environment)) ; => env1
(define env2 nil) ; => env2
(define x 0) ; => x
(define form '(+ x 1)) ; => form
(let ((x 10))
(set! env2 (current-environment))
nil) ; => nil
(define env3 (let ((x 15)) (current-environment))) ; => env3
; Now, here's the rub
(eval form env1) ; => 1
(eval form env2) ; => 11
(eval form env3) ; => 16
The second argument to eval is optional, in which case it
(define x 0) ; => x
(define form '(+ x 1)) ; => form
(eval form) ; => 1
(let ((x 10))
(eval form)) ; => 11
UMB Scheme implements a macro definition defining the
macro form
make-environment,
such that
(make-environment
(define <name1> <expr1>)
...
(define <namen> <exprn>))
defines a new environment, composed of the current envi
ronment augmented by a new nested frame comprised of the
given definitions. Of course,
(make-environment)
without any definitions has the same effect as
(current-environment)
DEBUGGING
UMB Scheme has a simple debugger. Throughout a session
one is in one of two modes: top-level mode or debugging
mode. In general, one works in top-level mode. If the
debugger has been turned on, an error raised during an
evaluation (or an explicit call to break) causes a break
which puts the user into debugging mode. The user can
place explicit calls to break or error in his code:
(break obj ...); Print the objects and break the evaluation.
(error obj ...); Print the objects and raise an error.
In debugging mode, certain primitives apply for finding
the cause of the offense. Notice that syntax errors cause
a reset , returning the user to top-level mode. When the
debugger is turned off, all errors simply cause a reset to
top-level mode.
(debug) ; turn on the debugger
(debug-off) ; turn off the debugger.
NB: When the debugger is turned on, UMB Scheme is no
longer properly tail-recursive as required by the language
by default. One can insure the debugger is always turned
on by putting a call to debug in the Scheme Init file
(e.g. .scheme).
Any scheme expression may be evaluated in debugging mode.
It is evaluated in the environment that existed when the
break occurred in the top level computation; this makes it
easy to find the bindings for local variables. In addi
tion, the following primitives apply.
(reset) ; Return to the top-level read-eval-print loop.
Control-D ; Typing Control-D causes a (reset).
(show-env) ; Show the bindings of all local environments.
(show-env k) ; Show-env for only the k most recent frames.
(show-globals) ; Show bindings for all user-defined globals.
(show-proc-env proc); Show a procedure's environment.
(how symbol) ; Show the expression causing symbol's binding.
(where) ; Show an enumerated backtrace of the
; computation being debugged.
(where k) ; Show the most recent k steps of the backtrace.
(go obj) ; Resume the computation being debugged,
; substituting the value of obj for the most recent
; step (as indicated by a call to where).
(go k obj) ; Likewise, but obj is substituted for the k-th step
; as enumerated in the backtrace by (where).
Tracing a procedure involves interrupting evaluation when
either the procedure is about to be applied or the proce
dure is about to return with a value. Upon such an inter
ruption, the call or the returned value is printed, and
the user is put in debugging mode.
(trace proc ...); Trace named procedures.
(trace) ; Trace all procedures.
(untrace proc ...); Cancel tracing for named procedures.
(untrace) ; Cancel tracing for all procedures.
Control-D ; Resume the computation interrupted in the trace.
Stepping through a computation involves interrupting eval
uation at every k-th expression, for a given k. The
expression in question is printed and the user is put in
debugging mode.
(step k) ; Interrupt evaluation at every k-th expression.
(step 0) ; Inhibit stepping altogether.
Control-D ; Resume the evaluation broken in the stepping.
Notice that, when stepping or tracing is in effect, any
or the k-th expression being reached) will interrupt eval
uation. Since typing Control-D resumes the interrupted
computation, one can step through such a computation by
repeatedly typing Control-D.
Finally, errors or explicit calls to break arising while
in debugging mode simply leave the user in debugging mode.
Unlike some other implementations, UMB Scheme does not
support nested debugging sessions. (Keep it simple.)
FILES
/usr/share/ubm-scheme/prelude.scheme
/usr/share/umb-scheme/SLIB-for-umb-scheme.init
/usr/local/lib/slib/*
SEE ALSO
Release Notes
COPYING
Copyright (C) 1988, 1990 William R Campbell
Permission is granted to make and distribute verbatim
copies of this manual provided the copyright notice and
this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified ver
sions of this manual under the conditions for verbatim
copying, provided that the entire resulting derived work
is distributed under the terms of a permission notice
identical to this one.
AUTHOR
William Campbell, University of Massachusetts at Boston,
with help from Karl Berry,Barbara Dixey, Ira Gerstein,
Mary Glaser, Kathy Hargreaves, Bill McCabe, Long Nguyen,
Susan Quina, Jeyashree Sivasubram, Bela Sohoni and Thang
Quoc Tran.
BUGS
No doubt, there are bugs. Please report them to
bill@cs.umb.edu.
Man(1) output converted with
man2html