Obsolete.
This commit is contained in:
parent
0e9c2e5626
commit
451f06f0d5
|
@ -1,309 +0,0 @@
|
|||
|
||||
Documentation for Big Scheme
|
||||
|
||||
|
||||
Big Scheme is a set of generally useful facilities.
|
||||
|
||||
Easiest way to access these things:
|
||||
|
||||
> ,open big-scheme
|
||||
Load structure big-scheme (y/n)? y
|
||||
...
|
||||
|
||||
A better way is to use the module system.
|
||||
|
||||
-----
|
||||
|
||||
Ascii conversions
|
||||
|
||||
(CHAR->ASCII <char>) => <integer>
|
||||
(ASCII->CHAR <integer>) => <char>
|
||||
These are identical to CHAR->INTEGER and INTEGER->CHAR except that
|
||||
they use the ASCII encoding.
|
||||
|
||||
-----
|
||||
|
||||
Bitwise operations
|
||||
|
||||
(BITWISE-NOT <integer>) => <integer>
|
||||
(BITWISE-AND <integer> <integer>) => <integer>
|
||||
(BITWISE-IOR <integer> <integer>) => <integer>
|
||||
(BITWISE-XOR <integer> <integer>) => <integer>
|
||||
These perform various logical operations on integers on a bit-by-bit
|
||||
basis, using a two's-complement representation.
|
||||
|
||||
(ARITHMETIC-SHIFT <integer> <bit-count>) => <integer>
|
||||
Shift the integer by the given bit count, shifting left for positive
|
||||
counts and right for negative ones. A two's complement
|
||||
representation is used.
|
||||
|
||||
-----
|
||||
|
||||
Hash tables
|
||||
|
||||
(MAKE-TABLE) => <table>
|
||||
(MAKE-STRING-TABLE) => <string-table>
|
||||
Make a new, empty table. MAKE-TABLE returns a table that uses EQ?
|
||||
for comparing keys and an ad-hoc hash function. String tables uses
|
||||
strings for keys.
|
||||
|
||||
(MAKE-TABLE-MAKER <comparison-procedure> <hash-procedure>) => <procedure>
|
||||
Returns a procedure of no arguments that makes tables that use the
|
||||
given comparison and hash procedures.
|
||||
(<comparison-procedure> <key1> <key2>) => <boolean>
|
||||
(<hash-procedure> <key>) => <non-negative-integer>
|
||||
|
||||
(TABLE? <x>) => <boolean>
|
||||
True if <x> is a table.
|
||||
|
||||
(TABLE-REF <table> <key>) => <x>
|
||||
Return the value for <key> in <table>, or #F if there is none.
|
||||
<key> should be of a type appropriate for <table>.
|
||||
|
||||
(TABLE-SET! <table> <key> <value>) => <undefined>
|
||||
Make <value> be the value of <key> in <table>. <key> should be of a
|
||||
type appropriate for <table>.
|
||||
|
||||
(TABLE-WALK <procedure> <table>) => <undefined>
|
||||
Apply <procedure>, which must accept two arguments, to every
|
||||
associated key and value in <table>.
|
||||
|
||||
-----
|
||||
|
||||
Enumerations
|
||||
|
||||
(DEFINE-ENUMERATION <type-name> (<name0> <name1> ...)) *SYNTAX*
|
||||
Defines <type-name> to be an enumeration with components <name0>
|
||||
<name1> .... Also defines <type-name>-COUNT to be the number of
|
||||
components.
|
||||
|
||||
(ENUM <type-name> <component-name>) => <integer> *SYNTAX*
|
||||
Evaluates to the value of <component-name> within the enumeration
|
||||
<type-name>. For example, if (DEFINE-ENUMERATION COLOR (GREEN
|
||||
RED)), then (ENUM COLOR GREEN) is zero and (ENUM COLOR RED) is one.
|
||||
The mapping from name to integer is done at macro-expansion time, so
|
||||
there is no run-time overhead.
|
||||
|
||||
(ENUMERAND->NAME <integer> <enumeration>) => <symbol>
|
||||
Returns the name associated with <integer> within <enumeration>.
|
||||
E.g. (ENUMERAND->NAME 1 COLOR) => 'RED.
|
||||
|
||||
(NAME->ENUMERAND <symbol> <enumeration>) => <integer>
|
||||
Returns the integer associated with <symbol> within <enumeration>.
|
||||
E.g. (ENUMERAND->NAME 'GREEN COLOR) => 0.
|
||||
|
||||
-----
|
||||
|
||||
Port extensions
|
||||
|
||||
(MAKE-TRACKING-INPUT-PORT <input-port>) => <input-port>
|
||||
(MAKE-TRACKING-OUTPUT-PORT <output-port>) => <output-port>
|
||||
These return ports that keep track of the current row and column and
|
||||
are otherwise identical to their arguments.
|
||||
|
||||
(MAKE-STRING-INPUT-PORT <string>) => <input-port>
|
||||
Returns a port that reads characters from the supplied string.
|
||||
|
||||
(CALL-WITH-STRING-OUTPUT-PORT <procedure>) => <string>
|
||||
The procedure is called on a port. When it returns, CALL-WITH-STRING-
|
||||
OUTPUT-PORT returns a string containing the characters written to the port.
|
||||
|
||||
(WRITE-ONE-LINE <output-port> <character-count> <procedure>) => <unspecified>
|
||||
The procedure is called on an output port. Output written to that
|
||||
port is copied to <output-port> until <character-count> characters
|
||||
have been written, at which point WRITE-ONE-LINE returns.
|
||||
|
||||
(CURRENT-ROW <port>) => <integer> or #f
|
||||
(CURRENT-COLUMN <port>) => <integer> or #f
|
||||
These return the current read or write location of the port. #F is
|
||||
returned if the port does not keep track of its location.
|
||||
|
||||
(FRESH-LINE <output-port>) => <undefined>
|
||||
Write a newline character to <output-port> if its current column is not 0.
|
||||
|
||||
(INPUT-PORT? <any>) => <boolean>
|
||||
(OUTPUT-PORT? <any>) => <boolean>
|
||||
These are versions of the standard Scheme predicates that answer true for
|
||||
extended ports.
|
||||
|
||||
-----
|
||||
|
||||
Queues
|
||||
|
||||
(MAKE-QUEUE) => <queue>
|
||||
Returns a new, empty queue.
|
||||
|
||||
(ENQUEUE! <queue> <x>) => <undefined>
|
||||
Puts <x> on the queue.
|
||||
|
||||
(DEQUEUE! <queue>) => <x>
|
||||
Removes and returns the first element of the queue.
|
||||
|
||||
(QUEUE-EMPTY? <queue>) => <boolean>
|
||||
True if the queue is empty.
|
||||
|
||||
(QUEUE? <x>) => <boolean>
|
||||
True if <x> is a queue.
|
||||
|
||||
(QUEUE->LIST <queue>) => <list>
|
||||
Returns a list of the elements of the queue, in order.
|
||||
|
||||
(QUEUE-LENGTH <queue>) => <integer>
|
||||
The number of elements currently on the queue.
|
||||
|
||||
(DELETE-FROM-QUEUE! <queue> <x>) => <boolean>
|
||||
Removes the first occurance of <x> from the queue, returning true if
|
||||
it was found and false otherwise.
|
||||
|
||||
-----
|
||||
|
||||
Little utility procedures
|
||||
|
||||
(ATOM? <any>) => <boolean>
|
||||
(ATOM? x) == (NOT (PAIR? x))
|
||||
|
||||
(NULL-LIST? <list>) => <boolean>
|
||||
Returns #t for the empty list, #f for a pair, and signals an error
|
||||
otherwise.
|
||||
|
||||
(NEQ? <any> <any>) => <boolean>
|
||||
(NEQ? x y) is the same as (NOT (EQ? x y)).
|
||||
|
||||
(N= <number> <number>) => <boolean>
|
||||
(N= x y) is the same as (NOT (= x y)).
|
||||
|
||||
(IDENTITY <any>) => <any>
|
||||
(NO-OP <any>) => <any>
|
||||
These both just return their argument. NO-OP is guaranteed not to
|
||||
be compiled in-line, IDENTITY may be.
|
||||
|
||||
-----
|
||||
|
||||
List utilities
|
||||
|
||||
(MEMQ? <element> <list>) => <boolean>
|
||||
Returns true if <element> is in <list>, false otherwise.
|
||||
|
||||
(ANY? <predicate> <list>) => <boolean>
|
||||
Returns true if <predicate> is true for any element of <list>.
|
||||
|
||||
(EVERY? <predicate> <list>) => <boolean>
|
||||
Returns true if <predicate> is true for every element of <list>.
|
||||
|
||||
(ANY <predicate> <list>)
|
||||
(FIRST <predicate> <list>)
|
||||
ANY returns some element of <list> for which <predicate> is true, or
|
||||
#F if there are none. FIRST does the same except that it returns
|
||||
the first element for which <predicate> is true.
|
||||
|
||||
(FILTER <predicate> <list>)
|
||||
(FILTER! <predicate> <list>)
|
||||
Returns a list containing all of the elements of <list> for which
|
||||
<predicate> is true. The order of the elements is preserved.
|
||||
FILTER! may reuse the storage of <list>.
|
||||
|
||||
(FILTER-MAP <procedure> <list>)
|
||||
The same as FILTER except the returned list contains the results of
|
||||
applying <procedure> instead of elements of <list>. (FILTER-MAP p
|
||||
l) is the same as (FILTER IDENTITY (MAP p l)).
|
||||
|
||||
(PARTITION-LIST <predicate> <list>) => <list> <list>
|
||||
(PARTITION-LIST! <predicate> <list>) => <list> <list>
|
||||
The first return value contains those elements <list> for which
|
||||
<predicate> is true, the second contains the remaining elements.
|
||||
The order of the elements is preserved. PARTITION-LIST! may resuse
|
||||
the storage of the <list>.
|
||||
|
||||
(REMOVE-DUPLICATES <list>) => <list>
|
||||
Returns its argument with all duplicate elements removed. The first
|
||||
instance of each element is preserved.
|
||||
|
||||
(DELQ <element> <list>) => <list>
|
||||
(DELQ! <element> <list>) => <list>
|
||||
(DELETE <predicate> <list>) => <list>
|
||||
All three of these return <list> with some elements removed. DELQ
|
||||
removes all elements EQ? to <element>. DELQ! does the same and may
|
||||
modify the list argument. DELETE removes all elements for which
|
||||
<predicate> is true. Both DELQ and DELETE may reuse some of the
|
||||
storage in the list argument, but won't modify it.
|
||||
|
||||
(REVERSE! <list>) => <list>
|
||||
Destructively reverses <list>.
|
||||
|
||||
(SORT-LIST <list> <a<b-procedure>) => <list>
|
||||
(SORT-LIST! <list> <a<b-procedure>) => <list>
|
||||
Returns a sorted copy of <list>. The sorting algorithm is stable.
|
||||
(SORT-LIST '(6 5 1 3 2 4) <) => '(1 2 3 4 5 6)
|
||||
|
||||
-----
|
||||
|
||||
Additional syntax
|
||||
|
||||
(DESTRUCTURE ((<pattern> <init>) ...) <body> ...) *SYNTAX*
|
||||
The <init>s are evaluated and their values are dissasembled
|
||||
according to the corresponding patterns, with identifiers in the
|
||||
patterns being bound to fresh locations holding the corresponding
|
||||
part, and the body is evaluated in the extended environment.
|
||||
Patterns may be any of the following:
|
||||
|
||||
#f Discard the corresponding part.
|
||||
<identifier> Bind the <indentifier> to the part.
|
||||
(<pattern> ...) The part must be a list at least as long as the
|
||||
pattern.
|
||||
(<pattern1> ... . <patternN>)
|
||||
The same thing, except that the final CDR of the
|
||||
part is dissasembled according to <patternN>.
|
||||
#(<pattern> ...) The part must be a vector at least as long as the
|
||||
pattern.
|
||||
|
||||
(RECEIVE <identifiers> <exp> <body> ...) *SYNTAX*
|
||||
=> (CALL-WITH-VALUES (LAMBDA () <exp>) (LAMBDA <identifiers> <body> ...))
|
||||
Bind <identifiers> to the values returned by <exp>, and evaluate the
|
||||
body in the resulting environment.
|
||||
|
||||
-----
|
||||
|
||||
Printing and related procedures
|
||||
|
||||
(CONCATENATE-SYMBOL . <components>)
|
||||
Returns the symbol whose name is produced by concatenating the DISPLAYed
|
||||
representations of <components>.
|
||||
(CONCATENATE-SYMBOL 'abc "-" 4) => 'abc-4
|
||||
|
||||
(FORMAT <port-spec> <format-string> . <arguments>) => <string> or <undefined>
|
||||
Prints the arguments to the port as directed by the string. <port-spec>
|
||||
should be either:
|
||||
An output port. The output is written directly to the port. The result
|
||||
of the call to FORMAT is undefined.
|
||||
#T. The output is written to the current output port. The result of the
|
||||
call to FORMAT is undefined.
|
||||
#F. The output is written to a string, which is then the value returned
|
||||
from the call to FORMAT.
|
||||
Characters in <format-string> which are not preceded by a ~ are written
|
||||
directly to the output. Characters preceded by a ~ have the following
|
||||
meaning (case is irrelevant; ~a and ~A have the same meaning):
|
||||
~~ prints a single ~
|
||||
~A prints the next argument using DISPLAY
|
||||
~D prints the next argument as a decimal number
|
||||
~S prints the next argument using WRITE
|
||||
~% prints a newline character
|
||||
~& prints a NEWLINE character if the previous printed character was not one
|
||||
(this is implemented using FRESH-LINE)
|
||||
~? performs a recursive call to FORMAT using the next two arguments as the
|
||||
string and the list of arguments
|
||||
|
||||
(ERROR <format-string> . <format-arguments>)
|
||||
(BREAKPOINT <format-string> . <format-arguments>)
|
||||
Signals an error or breakpoint condition, passing it the result of
|
||||
applying FORMAT to the arguments.
|
||||
|
||||
(P <thing>)
|
||||
(P <thing> <output-port>)
|
||||
(PRETTY-PRINT <thing> <output-port> <position>)
|
||||
Pretty-print <thing>. The current output port is used if no port is
|
||||
specified. <position> is the starting offset. <thing> will be
|
||||
pretty-printed to the right of this column.
|
||||
|
||||
|
||||
Original by RK, 26 Jan 1993.
|
||||
Minor changes by JAR, 5 Dec 1993.
|
4430
doc/external.ps
4430
doc/external.ps
File diff suppressed because it is too large
Load Diff
1417
doc/module.ps
1417
doc/module.ps
File diff suppressed because it is too large
Load Diff
|
@ -1,81 +0,0 @@
|
|||
-- this file is probably obsolete --
|
||||
|
||||
The package system interface. Much too complicated.
|
||||
|
||||
Signatures
|
||||
|
||||
make-simple-signature
|
||||
make-compound-signature
|
||||
signature?
|
||||
signature-ref
|
||||
signature-walk
|
||||
|
||||
Structures
|
||||
|
||||
make-structure
|
||||
structure?
|
||||
structure-signature
|
||||
structure-package
|
||||
structure-name
|
||||
|
||||
Packages
|
||||
|
||||
make-package
|
||||
make-simple-package ;start.scm
|
||||
|
||||
Lookup and definition operations
|
||||
|
||||
package-lookup
|
||||
package-lookup-type ;comp.scm
|
||||
package-find-location ;rts/env.scm
|
||||
package-lookup-location ;segment.scm
|
||||
probe-package
|
||||
package-check-assigned
|
||||
package-check-variable
|
||||
|
||||
package-define!
|
||||
package-define-type! ;hmm.
|
||||
package-ensure-defined!
|
||||
|
||||
Things needed by the form/file/package scanner
|
||||
|
||||
for-each-definition ;for integrate-all-primitives!
|
||||
package-accesses ;for scan-package
|
||||
package-clauses ;for scan-package
|
||||
package-file-name ;for scan-package
|
||||
package-opens ;for scan-package
|
||||
package-evaluator ;for define-syntax
|
||||
package-for-syntax ;for define-syntax
|
||||
|
||||
Miscellaneous
|
||||
|
||||
$note-undefined ;eval.scm
|
||||
noting-undefined-variables ;eval.scm, etc.
|
||||
package-uid ;eval.scm
|
||||
set-shadow-action! ;eval.scm
|
||||
verify-later! ;for the define-structures macro
|
||||
reset-packages-state! ;Makefile - for linker
|
||||
initialize-reified-package! ;for reification
|
||||
transform-for-structure-ref ;for reification ?
|
||||
|
||||
Inessential (for package mutation, programming environment)
|
||||
|
||||
check-structure
|
||||
package-integrate? ;env/debug.scm
|
||||
set-package-integrate?! ;env/debug.scm
|
||||
package-loaded? ;env/load-package.scm
|
||||
set-package-loaded?! ;env/load-package.scm
|
||||
package-name ;env/command.scm
|
||||
package-name-table ;env/debuginfo.scm
|
||||
package-open! ;env/debug.scm
|
||||
package-system-sentinel ;env/command.scm
|
||||
package-unstable? ;env/pacman.scm
|
||||
package? ;env/command.scm
|
||||
undefined-variables ;env/debug.scm
|
||||
|
||||
Location names (also inessential)
|
||||
|
||||
flush-location-names
|
||||
location-name
|
||||
location-name-table
|
||||
location-package-name
|
186
doc/syslog.txt
186
doc/syslog.txt
|
@ -1,186 +0,0 @@
|
|||
The Syslog Interface
|
||||
====================
|
||||
|
||||
This is an interface to the syslog facility of most Unix systems. Its
|
||||
interface differs significantly from that of the Unix library
|
||||
functionality in order to support multiple simultaneous connections to
|
||||
the syslog facility.
|
||||
|
||||
The functionality is in a structure called SYSLOG.
|
||||
|
||||
This documentation is very preliminary. Consult the syslog(3) manpage
|
||||
alongside this document.
|
||||
|
||||
Log Options
|
||||
===========
|
||||
|
||||
(syslog-option syslog-option-name) -> syslog-option
|
||||
(make-syslog-options list) -> syslog-options
|
||||
(syslog-options syslog-option-name ...) -> syslog-options
|
||||
(syslog-options->list syslog-options) -> list of syslog-option
|
||||
(syslog-options-on? syslog-options syslog-options) -> boolean
|
||||
(syslog-options=? syslog-options syslog-options) -> boolean
|
||||
(syslog-options? x) -> boolean
|
||||
|
||||
Here is a list of possible names of syslog options:
|
||||
|
||||
console
|
||||
If syslog cannot pass the message to syslogd it will attempt to
|
||||
write the message to the console.
|
||||
|
||||
delay
|
||||
Delay opening the connection to syslogd immediately until the first
|
||||
message is logged.
|
||||
|
||||
no-delay
|
||||
Open the connection to syslogd immediately. Normally
|
||||
the open is delayed until the first message is logged.
|
||||
Useful for programs that need to manage the order in which
|
||||
file descriptors are allocated.
|
||||
|
||||
NOTA BENE: The delay and no-delay options are included for
|
||||
completeness, but do not have the expected effect in the present
|
||||
Scheme interface: Because the Scheme interface has to multiplex
|
||||
multiple simultaneous connections to the syslog facility over a
|
||||
single one, open and close operations on that facility happen at
|
||||
unpredictable times.
|
||||
|
||||
standard-error
|
||||
Write the log messages to standard error output as well to the
|
||||
system log.
|
||||
|
||||
log-pid
|
||||
Log the process id with each message: useful for identifying
|
||||
instantiations of daemons.
|
||||
|
||||
|
||||
Log Facilities
|
||||
==============
|
||||
|
||||
(syslog-facility syslog-facility-name) -> syslog-facility)
|
||||
(syslog-facility? x) -> boolean)
|
||||
(syslog-facility=? syslog-facility syslog-facility)
|
||||
|
||||
Here is a list of possible names of syslog facilities:
|
||||
|
||||
authorization
|
||||
The authorization system: login, su, getty, etc.
|
||||
|
||||
cron
|
||||
The cron daemon.
|
||||
|
||||
daemon
|
||||
System daemons, such as routed, that are not provided for explicitly
|
||||
by other facilities.
|
||||
|
||||
kernel
|
||||
Messages generated by the kernel.
|
||||
|
||||
lpr
|
||||
The line printer spooling system: lpr, lpc, lpd, etc.
|
||||
|
||||
mail
|
||||
The mail system.
|
||||
|
||||
news
|
||||
The network news system.
|
||||
|
||||
user
|
||||
Messages generated by random user processes.
|
||||
|
||||
uucp
|
||||
The uucp system.
|
||||
|
||||
local0 local1 local2 local3 local4 local5 local6 local7
|
||||
Reserved for local use.
|
||||
|
||||
Log Levels
|
||||
==========
|
||||
|
||||
Here is a list of possible names of syslog levels:
|
||||
|
||||
(syslog-level syslog-level-name) -> syslog-level
|
||||
(syslog-level? x) -> boolean
|
||||
(syslog-level=? syslog-level syslog-level) -> boolean
|
||||
|
||||
emergency
|
||||
A panic condition. This is normally broadcast to all users.
|
||||
|
||||
alert
|
||||
A condition that should be corrected immediately, such as a
|
||||
corrupted system database.
|
||||
|
||||
critical
|
||||
Critical conditions, e.g., hard device errors.
|
||||
|
||||
error
|
||||
Errors.
|
||||
|
||||
warning
|
||||
Warning messages.
|
||||
|
||||
notice
|
||||
Conditions that are not error conditions, but should possibly be
|
||||
handled specially.
|
||||
|
||||
info
|
||||
Informational messages.
|
||||
|
||||
debug
|
||||
Messages that contain information normally of use only when
|
||||
debugging a program.
|
||||
|
||||
Log Masks
|
||||
=========
|
||||
|
||||
Log masks can mask out syslog messages at any set of levels. A log
|
||||
mask is constructed from a set of levels.
|
||||
|
||||
(syslog-mask syslog-level-name ...) -> syslog-mask
|
||||
(levels->syslog-mask list) -> syslog-mask
|
||||
(syslog-mask->levels syslog-mask) -> list of syslog-level
|
||||
syslog-mask-all: syslog-mask
|
||||
(syslog-mask-upto syslog-level) -> syslog-mask
|
||||
(syslog-mask-levels-on? syslog-mask syslog-mask) -> boolean
|
||||
(syslog-mask? x) -> boolean
|
||||
(syslog-mask=? syslog-mask syslog-mask) -> boolean
|
||||
|
||||
Logging
|
||||
=======
|
||||
|
||||
(open-syslog-channel string syslog-options syslog-facility syslog-mask)
|
||||
-> syslog-channel
|
||||
(close-syslog-channel syslog-channel)
|
||||
|
||||
These two create and destroy a connection to the syslog facility,
|
||||
respectively. The first argument will be prepended to every message.
|
||||
The other arguments belong to the categories mentioned above. Note
|
||||
that it is not necessary to explicitly open a syslog channel to do
|
||||
logging; there is an implicit syslog channel which is already open and
|
||||
whose parameters can be bound dynamically with WITH-SYSLOG-DESTINATION
|
||||
below.
|
||||
|
||||
(with-syslog-destination maybe-string
|
||||
maybe-syslog-options
|
||||
maybe-syslog-facility
|
||||
maybe-syslog-mask
|
||||
thunk) -> values
|
||||
|
||||
This dynamically binds parameters of the implicit syslog channel and
|
||||
runs THUNK within those parameter bindings, returning what THUNK
|
||||
returns. Each of the parameters may be #f in which case the previous
|
||||
values will be used.
|
||||
|
||||
(syslog level message)
|
||||
(syslog level message channel)
|
||||
(syslog level message maybe-string)
|
||||
(syslog level message maybe-string maybe-syslog-options)
|
||||
(syslog level message maybe-string maybe-syslog-options
|
||||
maybe-syslog-facility)
|
||||
(syslog level message maybe-string maybe-syslog-options
|
||||
maybe-syslog-facility maybe-syslog-mask)
|
||||
|
||||
SYSLOG actually logs a message, either to an explicitly specified
|
||||
syslog channel, or to the implicit syslog channel. Each of the
|
||||
parameters of the implicit channel can be explicitly specified as
|
||||
well, overriding the parameters of the channel.
|
|
@ -1,709 +0,0 @@
|
|||
|
||||
|
||||
A User's Guide to Scheme 48
|
||||
|
||||
|
||||
|
||||
A line may take us hours, yet if it does not seem a moment's thought
|
||||
All our stitching and unstitching has been as nought.
|
||||
|
||||
Yeats
|
||||
Adam's Curse
|
||||
|
||||
|
||||
Introduction
|
||||
|
||||
Scheme 48 is an implementation of the Scheme programming language as
|
||||
described in the Revised^4 Report on the Algorithmic Language Scheme.
|
||||
It is based on a compiler and interpreter for a virtual Scheme
|
||||
machine. The name derives from our desire to have an implementation
|
||||
that is simple and lucid enough that it looks as if it were written in
|
||||
just 48 hours. We don't claim to have reached that stage yet; much
|
||||
more simplification is necessary.
|
||||
|
||||
Scheme 48 tries to be faithful to the upcoming Revised^5 Scheme
|
||||
Report, providing neither more nor less in the initial user
|
||||
environment. (This is not to say that more isn't available in other
|
||||
environments; see below.) Support for numbers is weak: bignums are
|
||||
slow and floating point is almost nonexistent (see description of
|
||||
floatnums, below). DEFINE-SYNTAX, LET-SYNTAX, LETREC-SYNTAX, and
|
||||
SYNTAX-RULES are supported, but not the rest of the Revised^4 Scheme
|
||||
macro proposal.
|
||||
|
||||
The Revised^5 Report hasn't been published yet, but it will be very
|
||||
similar to the Revised^4 Report. For a list of differences, see
|
||||
doc/meeting.tex.
|
||||
|
||||
This is what might be called an alpha release. Please report bugs,
|
||||
especially in the VM, especially core dumps, to
|
||||
scheme-48-bugs@altdorf.ai.mit.edu. Include the version number x.yy
|
||||
from the "Welcome to Scheme 48 x.yy" greeting message in your bug
|
||||
report. It is a goal of this project to produce a bullet-proof
|
||||
system; we want no bugs and, especially, no crashes. (There are a few
|
||||
known bugs, listed in the TODO file that comes with the distribution.)
|
||||
|
||||
Send mail to scheme-48-request@altdorf.ai.mit.edu to be put on a
|
||||
mailing list for announcements, discussion, bug reports, and bug
|
||||
fixes.
|
||||
|
||||
-----
|
||||
|
||||
Command line arguments
|
||||
|
||||
A few command line arguments are processed by the virtual machine as
|
||||
it starts up.
|
||||
|
||||
scheme48 [-i image] [-h heapsize] [-o filename] [-s stacksize]
|
||||
[-a argument ...]
|
||||
|
||||
-i image
|
||||
specifies a heap image file to resume. This defaults to a heap
|
||||
image that runs a Scheme command processor. Heap images are
|
||||
created by the ,dump and ,build commands, for which see below.
|
||||
|
||||
-h heapsize
|
||||
specifies how much space should be reserved for allocation.
|
||||
Heapsize is in words (where one word = 4 bytes), and covers both
|
||||
semispaces, only one of which is in use at any given time (except
|
||||
during garbage collection). Cons cells are currently 3 words, so
|
||||
if you want to make sure you can allocate a million cons cells,
|
||||
you should specify -h 6000000 (actually somewhat more than this,
|
||||
to account for the initial heap image and breathing room).
|
||||
|
||||
-s stacksize
|
||||
specifies how much space should be reserved for the continuation
|
||||
and environment stack. If this space is exhausted, continuations
|
||||
and environments are copied to the heap. stacksize is in words
|
||||
and defaults to 2500.
|
||||
|
||||
-o filename
|
||||
This specifies an executable file in which foreign identifiers can be
|
||||
looked up for the foreign function interface. Filename should be the
|
||||
file that contains the scheme48vm executable image. See
|
||||
doc/external.txt.
|
||||
|
||||
-a argument ...
|
||||
is only useful with images built using ,build. The arguments are
|
||||
passed as a list to the procedure specified in the ,build command.
|
||||
E.g.
|
||||
|
||||
> ,build (lambda (a) (for-each display a) (newline) 0) foo.image
|
||||
> ,exit
|
||||
% scheme48vm -i foo.image -a mumble "foo x"
|
||||
mumblefoo x
|
||||
%
|
||||
|
||||
The usual definition of the "s48" or "scheme48" command is actually a
|
||||
shell script that starts up the virtual machine with a -i argument
|
||||
specifying the development environment heap image, and a -o argument
|
||||
specifying the location of the virtual machine.
|
||||
|
||||
-----
|
||||
|
||||
Command processor
|
||||
|
||||
When you invoke the default heap image, a command processor starts
|
||||
running. At the > prompt, you can type either a Scheme form
|
||||
(expression or definition), or a command beginning with a comma.
|
||||
|
||||
Logistical commands:
|
||||
|
||||
,load <filename> ... load Scheme source file(s)
|
||||
Easier to type than (load "filename") because you don't have to
|
||||
shift to type the parentheses or quote marks. Also, it works in
|
||||
any package, unlike (load "filename"), which will work only work
|
||||
in packages in which the variable LOAD is defined properly.
|
||||
|
||||
,exit [<exp>] leave
|
||||
Exit back out to shell (or executive or whatever invoked Scheme 48
|
||||
in the first place). <exp> should evaluate to an integer. The
|
||||
integer is returned to the calling program. (On Unix, 0 is
|
||||
generally interpreted as success, nonzero as failure.)
|
||||
|
||||
|
||||
Command levels:
|
||||
|
||||
If an errors occurs, you are put in a command loop at the dynamic
|
||||
point at which the error occurred. The prompt will then be "n >"
|
||||
where n is the command level nesting depth.
|
||||
|
||||
<eof>
|
||||
Pop out one level (running any dynamic-wind "after" thunks), and
|
||||
resumes running all non-broken threads. EOF after a keyboard
|
||||
interrupt resumes running the interrupted thread. <eof> is usually
|
||||
control-D at a Unix shell or using the Emacs "cmuscheme48" library.
|
||||
|
||||
,reset top level
|
||||
Unwind all the way back out to top level.
|
||||
|
||||
,level <number> go to command level
|
||||
Unwind out to a given level. ,level 0 is the same as ,reset.
|
||||
|
||||
,push
|
||||
Go to a deeper command level. (See ,levels, below.)
|
||||
|
||||
|
||||
Debugging commands:
|
||||
|
||||
,preview
|
||||
Sort of like a backtrace, but because of tail recursion you see
|
||||
less than you might in debuggers for some other languages.
|
||||
|
||||
,threads
|
||||
Invoke the inspector on the threads running on the next level out.
|
||||
|
||||
,proceed <exp> ...
|
||||
Proceed after an interrupt or error, delivering the values of <exp>
|
||||
... to the continuation.
|
||||
|
||||
,trace <name> ...
|
||||
Start tracing calls to the named procedure or procedures.
|
||||
With no arguments, displays all procedures currently traced.
|
||||
This affects the binding of <name>, not the behavior of the
|
||||
procedure that's it's current value. The effect is similar to
|
||||
(define <name> (make-traced <name>))
|
||||
where make-traced is a procedure-returning procedure.
|
||||
|
||||
,untrace <name> ...
|
||||
Stop tracing calls to the named procedure or procedures.
|
||||
With no argument, stop tracing all calls to all procedures.
|
||||
|
||||
,condition
|
||||
The ,condition command selects and displays the condition object
|
||||
describing the error or interrupt that initiated the current
|
||||
command level. This is particularly useful in conjunction with
|
||||
the inspector. E.g. if a procedure is passed the wrong number of
|
||||
arguments, do ,condition followed by ,inspect ## to inspect the
|
||||
procedure and its arguments.
|
||||
|
||||
,bound? <name>
|
||||
Display the binding of <name>, if there is one.
|
||||
|
||||
,expand <form>
|
||||
Show macro expansion of <form>, if any.
|
||||
|
||||
,where <procedure>
|
||||
Display name of source file in which <procedure> is defined.
|
||||
|
||||
|
||||
Building images:
|
||||
|
||||
,dump <filename> [<identification>]
|
||||
This writes out the current heap. When the new image is resumed,
|
||||
it starts in the command processor. If present, <identification>
|
||||
should be a string (written with double quotes); this string will
|
||||
be part of the greeting message as the image starts up.
|
||||
|
||||
,build <exp> <filename>
|
||||
<exp> should evaluate to a procedure of one argument. When
|
||||
<filename> is resumed, that procedure will be invoked on the VM's
|
||||
-a arguments, which are passed as a list of strings. The
|
||||
procedure should return an integer (as for ,exit). The command
|
||||
processor and debugging system are not included in the image
|
||||
(unless you go to some effort to preserve them, such as retaining
|
||||
a continuation).
|
||||
|
||||
Doing ",flush" before building an image will make for smaller
|
||||
images, but if an error occurs, the error message may be less
|
||||
helpful. Doing ",flush source maps" before loading any programs
|
||||
will make the image still smaller.
|
||||
|
||||
|
||||
|
||||
Modes:
|
||||
|
||||
When given no argument, all of these commands toggle the corresponding
|
||||
mode. With the argument ?, the current setting is displayed.
|
||||
Otherwise the argument should be ON or OFF.
|
||||
|
||||
,batch [on | off | ?]
|
||||
In "batch mode," any error or interrupt that comes up will cause
|
||||
Scheme 48 to exit immediately with a non-zero exit status. Also,
|
||||
the command processor doesn't print prompts. The default is
|
||||
interactive mode.
|
||||
|
||||
,form-preferred [on | off | ?]
|
||||
Enable or disable "form preferred" mode. In this mode, command
|
||||
processor commands needn't be prefixed by comma. To see the value
|
||||
of a variable (or number - this should be fixed), do (begin
|
||||
<name>). "Command preferred" mode is the default.
|
||||
|
||||
,levels [on | off | ?]
|
||||
Enable or disable command levels. With levels enabled (the
|
||||
default), errors "push" a new command level, and <eof> (see above)
|
||||
or ,reset is required to return to top level. The effects of
|
||||
pushed command levels include:
|
||||
- a longer prompt
|
||||
- retention of the continuation in effect at the point of errors
|
||||
- longer ,previews
|
||||
- confusion among some newcomers
|
||||
With levels disabled, one must issue a ,push command immediately
|
||||
following an error in order to retain the error continuation for
|
||||
debugging purposes; otherwise the continuation is lost after the
|
||||
next evaluation request. If you don't know anything about the
|
||||
available debugging tools, then levels might as well be disabled.
|
||||
|
||||
This is an experimental feature inspired by gripes about how
|
||||
confusing recursive command loop levels are to newcomers to
|
||||
Scheme. Let me know (jar@ai.mit.edu) if you like it; otherwise it
|
||||
might get flushed.
|
||||
|
||||
Each level has its own set of threads, so pushing a new level stops
|
||||
all threads running at the current level.
|
||||
|
||||
,break-on-warnings [on | off | ?]
|
||||
When a warning is produced, enter a new command level, just as
|
||||
when an error occurs.
|
||||
|
||||
|
||||
Resource query and control:
|
||||
|
||||
,time <exp>
|
||||
Measure execution time.
|
||||
|
||||
,collect
|
||||
Invoke the garbage collector. Ordinarily this happens
|
||||
automatically, but the command tells how much space is available
|
||||
before and after the collection.
|
||||
|
||||
,keep <kind>
|
||||
,flush <kind>
|
||||
These control the amount of debugging information retained after
|
||||
compiling procedures. This information can consume a fair amount
|
||||
of space. <kind> is one of the following:
|
||||
. maps - environment maps (local variable names, for inspector)
|
||||
. source - source code for continuations (displayed by inspector)
|
||||
. names - procedure names (as displayed by WRITE and in error
|
||||
messages)
|
||||
. files - source file names
|
||||
These commands refer to future compilations only, not to procedures
|
||||
that already exist. To have any effect, they must be done before
|
||||
programs are loaded.
|
||||
|
||||
,flush
|
||||
The flush command with no argument deletes the database of names
|
||||
of initial procedures. Doing ",flush" before a ,build or ,dump
|
||||
will make the resulting image significantly smaller (by up to 200K
|
||||
bytes), but will compromise the information content of many error
|
||||
messages.
|
||||
|
||||
|
||||
Quite obscure:
|
||||
|
||||
,go <exp>
|
||||
This is like ,exit <exp> except that the evaluation of <exp>
|
||||
is tail-recursive with respect to the command processor. This
|
||||
means that the command processor itself can probably be GC'ed,
|
||||
should a garbage collection occur in the execution of <exp>.
|
||||
Any errors will be treated as in batch mode.
|
||||
|
||||
,translate <from> <to>
|
||||
For LOAD and the ,load command (but not for OPEN-xxPUT-FILE), file
|
||||
names beginning with the string <from> will be changed so that the
|
||||
initial <from> is replaced by the string <to>. E.g.
|
||||
|
||||
,translate /usr/gjc/ /zu/gjc/
|
||||
|
||||
will cause (load "/usr/gjc/foo.scm") to have the same effect as
|
||||
(load "/zu/gjc/foo.scm").
|
||||
|
||||
,from-file <filename> <form> ... ,end
|
||||
This is used by the cmuscheme48 Emacs library.
|
||||
|
||||
Other commands are (or should be) described in the module system
|
||||
document.
|
||||
|
||||
-----
|
||||
|
||||
Editing
|
||||
|
||||
We recommend running Scheme 48 under Gnu Emacs using the cmuscheme48
|
||||
command package. This is in the Scheme 48 distribution's emacs/
|
||||
subdirectory. It is a variant of the "cmuscheme" library, which
|
||||
comes to us courtesy of Olin Shivers, formerly of CMU. You might want
|
||||
to put the following in your emacs init file (.emacs):
|
||||
|
||||
(setq scheme-program-name "scheme48")
|
||||
(autoload 'run-scheme "cmuscheme48" "Run an inferior Scheme process." t)
|
||||
|
||||
To make the autoload and (require ...) forms work, you will also need
|
||||
to put the directory containing cmuscheme and related files in your
|
||||
emacs load-path:
|
||||
|
||||
(setq load-path (append load-path '("<scheme-48-directory>/emacs")))
|
||||
|
||||
For further documentation see emacs/cmuscheme48.el and emacs/comint.el.
|
||||
|
||||
-----
|
||||
|
||||
Performance
|
||||
|
||||
If you want to generally have your code run faster than it normally
|
||||
would, enter "benchmark mode" before loading anything. Otherwise
|
||||
calls to primitives (like + and cons) and in-line procedures (like not
|
||||
and cadr) won't be open-coded, and programs will run more slowly.
|
||||
Enter benchmark mode by issuing the ,bench command to the command
|
||||
processor.
|
||||
|
||||
The system doesn't start in benchmark mode by default because the
|
||||
Scheme report permits redefinitions of built-in procedures. In
|
||||
benchmark mode, such redefinitions don't work according to the report,
|
||||
because previously compiled calls may have in-lined the old
|
||||
definition, leaving no opportunity to call the new definition.
|
||||
|
||||
",bench" toggles benchmark mode. ",bench on" and ",bench off" turn it
|
||||
on and off.
|
||||
|
||||
-----
|
||||
|
||||
Inspector
|
||||
|
||||
There is a low-tech inspector available via the ,inspect and ,debug
|
||||
commands. The ,inspect command starts an inspector command loop.
|
||||
There is a focus object (the same as the command processor's ##), for
|
||||
which a menu of selectable components is displayed. To inspect a
|
||||
particular component, just type the corresponding number in the menu.
|
||||
For example:
|
||||
|
||||
,inspect '(a (b c) d)
|
||||
(a (b c) d)
|
||||
|
||||
[0] a
|
||||
[1] (b c)
|
||||
[2] d
|
||||
inspect: 1
|
||||
(b c)
|
||||
|
||||
[0] b
|
||||
[1] c
|
||||
inspect:
|
||||
|
||||
When a new object is selected, the previous one is pushed onto a
|
||||
stack. You can pop the stack, reverting to the previous object, with
|
||||
the U command.
|
||||
|
||||
The inspector is particularly useful with procedures, continuations,
|
||||
and records.
|
||||
|
||||
Other inspector commands:
|
||||
u pop object stack
|
||||
d down stack (current object must be a continuation)
|
||||
m print more of a long menu
|
||||
(...) evaluate a form and select result
|
||||
t select a closure or continuation's template
|
||||
q quit
|
||||
|
||||
## is always the object currently being inspected. After a Q command,
|
||||
or an error in the inspector, ## is the last object that was being
|
||||
inspected.
|
||||
|
||||
The inspector also accepts arbitrary command processor commands, e.g.
|
||||
the ,dis command (see below). The leading comma is optional.
|
||||
|
||||
After an error occurs, ,debug invokes the inspector on the
|
||||
continuation at the point of the error. The U and D (up and down)
|
||||
commands then make the inspector look like a conventional stack
|
||||
debugger, with continuations playing the role of stack frames. D goes
|
||||
to older or deeper continuations (frames), and U goes back up to more
|
||||
recent ones.
|
||||
|
||||
Templates are the static components of procedures; these are found
|
||||
inside of procedures and continuations, and contain the quoted
|
||||
constants and top-level variables referred to by byte-compiled code.
|
||||
|
||||
-----
|
||||
|
||||
Disassembler
|
||||
|
||||
The ,dis command disassembles procedures.
|
||||
|
||||
> ,dis cons
|
||||
cons
|
||||
0 (check-nargs= 2)
|
||||
2 (pop)
|
||||
3 (make-stored-object 2 pair)
|
||||
6 (return)
|
||||
>
|
||||
|
||||
The command argument is optional; if unsupplied it defaults to the
|
||||
current focus object (##).
|
||||
|
||||
The disassembler can also be invoked on continuations and templates.
|
||||
|
||||
-----
|
||||
|
||||
Module system
|
||||
|
||||
For information on the module (package) system, see doc/module.tex.
|
||||
|
||||
-----
|
||||
|
||||
Library
|
||||
|
||||
A number of useful utilities are either built in to Scheme 48 or can
|
||||
be loaded from an external library. These utilities are not visible
|
||||
in the user environment by default, but can be made available with the
|
||||
,open command. For example, to use the tables structure, do
|
||||
|
||||
> ,open tables
|
||||
>
|
||||
|
||||
If the utility is not already loaded, then the ,open command will
|
||||
offer to load it:
|
||||
|
||||
> ,open queues
|
||||
Load structure queues (y/n)?
|
||||
|
||||
Or, you can load something explicitly (without opening it) using the
|
||||
load-package command:
|
||||
|
||||
> ,load-package queues
|
||||
...
|
||||
> ,open queues
|
||||
|
||||
When loading a utility, the message "Note: optional optimizer not
|
||||
invoked" is innocuous. Feel free to ignore it.
|
||||
|
||||
See also the package system documentation, doc/module.tex.
|
||||
|
||||
Unfortunately, few of these wonderful things are documented. They are
|
||||
listed, however, in files rts-packages.scm, comp-packages.scm, and
|
||||
more-packages.scm in the distribution directory, and the bindings they
|
||||
export are listed in interfaces.scm and more-interfaces.scm. Here is
|
||||
a little information on the more generally useful structures.
|
||||
|
||||
architecture
|
||||
Information about the virtual machine. E.g.
|
||||
(enum op eq?) => the integer opcode of the EQ? instruction
|
||||
|
||||
arrays
|
||||
Arrays. See comments at the top of file big/array.scm.
|
||||
|
||||
ascii
|
||||
CHAR->ASCII and ASCII->CHAR. Similar to CHAR->INTEGER and
|
||||
INTEGER->CHAR except that ASCII encoding is guaranteed.
|
||||
|
||||
big-scheme
|
||||
Many generally useful features. See doc/big-scheme.txt.
|
||||
|
||||
bigbit
|
||||
Extensions to the bitwise logical operators (exported by
|
||||
the BITWISE structure) so that they operate on bignums.
|
||||
To use these you should do
|
||||
|
||||
,load-package bigbit
|
||||
,open bitwise
|
||||
|
||||
bitwise
|
||||
Bitwise logical operators. See doc/big-scheme.txt.
|
||||
|
||||
conditions
|
||||
Part of the condition system: DEFINE-CONDITION-PREDICATE and
|
||||
routines for examining condition objects. (See also handle,
|
||||
signals.)
|
||||
|
||||
define-record-types
|
||||
A DEFINE-RECORD-TYPE macro, providing a concise front end to the
|
||||
record package. (Richard and Jonathan favor different
|
||||
record type defining macros; this one is Jonathan's.)
|
||||
|
||||
The general syntax is:
|
||||
(define-record-type <tag> <type-name>
|
||||
(<constructor-name> <field-tag>*)
|
||||
<predicate-name>
|
||||
(<field-tag> <accessor-name> [<modifier-name>])*)
|
||||
|
||||
Example:
|
||||
(define-record-type pare :pare
|
||||
(kons x y)
|
||||
pare?
|
||||
(x kar set-kar!)
|
||||
(y kdr))
|
||||
This defines KONS to be a constructor, KAR and KDR to be
|
||||
accessors, SET-KAR! to be a modifier, and PARE? to be a predicate
|
||||
for a new type of object. The type itself is named :PARE.
|
||||
PARE is a tag used in printing the new objects.
|
||||
The field tags X and Y are used in the inspector and to match
|
||||
constructor arguments with fields.
|
||||
|
||||
By default, the new objects print as #{Pare}. The print method
|
||||
can be modified using DEFINE-RECORD-DISCLOSER:
|
||||
(define-record-discloser :pare
|
||||
(lambda (p) `(pare ,(kar p) ,(kdr p))))
|
||||
|
||||
defpackage
|
||||
The module system: DEFINE-STRUCTURE and DEFINE-INTERFACE.
|
||||
|
||||
defrecord
|
||||
A define-record-type macro, providing more concise use of the
|
||||
record package. (Richard and Jonathan favor different
|
||||
record type defining macros; this one is Richard's.)
|
||||
|
||||
destructuring
|
||||
DESTRUCTURE macro. See doc/big-scheme.txt.
|
||||
|
||||
display-conditions
|
||||
Displaying condition objects.
|
||||
(DISPLAY-CONDITION condition port) => unspecific
|
||||
Display condition in an easily readable form. E.g.
|
||||
> ,open display-conditions handle conditions
|
||||
> (display-condition
|
||||
(call-with-current-continuation
|
||||
(lambda (k)
|
||||
(with-handler (lambda (c punt)
|
||||
(if (error? c)
|
||||
(k c)
|
||||
(punt)))
|
||||
(lambda () (+ 1 'a)))))
|
||||
(current-output-port))
|
||||
|
||||
Error: exception
|
||||
(+ 1 'a)
|
||||
>
|
||||
|
||||
enumerated
|
||||
Enumerated types. See doc/big-scheme.txt.
|
||||
|
||||
extended-ports
|
||||
Ports for reading from and writing to strings, and related things.
|
||||
See doc/big-scheme.txt.
|
||||
|
||||
externals
|
||||
Rudimentary external function interface. See doc/external.txt.
|
||||
|
||||
filenames
|
||||
Rudimentary file name parsing and synthesis. E.g.
|
||||
file-name-directory and file-name-nondirectory are as in Gnu emacs.
|
||||
|
||||
floatnums
|
||||
Floating point numbers. These are in a very crude state; use at
|
||||
your own risk. They are slow and do not read or print correctly.
|
||||
|
||||
fluids
|
||||
Dynamically bound "variables."
|
||||
(MAKE-FLUID top-level-value) => a "fluid" object
|
||||
(FLUID fluid) => current value of fluid object
|
||||
(SET-FLUID! fluid value) => unspecific; changes current value of
|
||||
fluid object
|
||||
(LET-FLUID fluid value thunk) => whatever thunk returns
|
||||
Within the dynamic extent of execution of (thunk), the fluid
|
||||
object has value as its binding (unless changed by SET-FLUID!
|
||||
or overridden by another LET-FLUID).
|
||||
E.g.
|
||||
(define f (make-fluid 7))
|
||||
(define (baz) (+ (fluid f) 1))
|
||||
(baz) ;=> 8
|
||||
(let-fluid f 4 (lambda () (+ (baz) 1))) ;=> 6
|
||||
|
||||
formats
|
||||
A simple FORMAT procedure, similar to Common Lisp's or T's.
|
||||
See doc/big-scheme.txt for documentation.
|
||||
|
||||
general-tables
|
||||
An extended version of TABLES; supports tables keyed by strings.
|
||||
See doc/big-scheme.txt.
|
||||
|
||||
handle
|
||||
Part of the condition system.
|
||||
(WITH-HANDLER handler thunk) => whatever thunk returns.
|
||||
handler is a procedure of two arguments. The first argument
|
||||
is a condition object, and the second is a "punt" procedure.
|
||||
The handler should examine the condition object (using ERROR?,
|
||||
etc. from the CONDITIONS structure). If it decides not to do
|
||||
anything special, it should tail-call the "punt" procedure.
|
||||
Otherwise it should take appropriate action and perform a
|
||||
non-local exit. It should not just return unless it knows
|
||||
damn well what it's doing; returns in certain situations can
|
||||
cause VM crashes.
|
||||
|
||||
interrupts
|
||||
Interrupt system
|
||||
|
||||
ports
|
||||
A few extra port-related operations, notably FORCE-OUTPUT.
|
||||
|
||||
pp
|
||||
A pretty-printer. (p <exp>) will pretty-print the result of <exp>,
|
||||
which must be an S-expression. (Source code for procedures is not
|
||||
retained or reconstructed.) You can also do (p <exp> <port>) to
|
||||
print to a specific port.
|
||||
|
||||
The procedure pretty-print takes three arguments: the object to be
|
||||
printed, a port to write to, and the current horizontal cursor
|
||||
position. If you've just done a newline, then pass in zero for
|
||||
the position argument.
|
||||
|
||||
The algorithm is very peculiar, and sometimes buggy.
|
||||
|
||||
queues
|
||||
FIFO queues.
|
||||
|
||||
random
|
||||
Not-very-random random number generator. The <seed> should be between
|
||||
0 and 2^28 exclusive.
|
||||
|
||||
> (define random (make-random <seed>))
|
||||
> (random) => a pseudo-random number between 0 and 2^28
|
||||
|
||||
receiving
|
||||
Convenient interface to the call-with-values procedure, like
|
||||
Common Lisp's multiple-value-bind macro. See doc/big-scheme.txt.
|
||||
|
||||
records
|
||||
MAKE-RECORD-TYPE and friends. See the Scheme of Things column in
|
||||
Lisp Pointers, volume 4, number 1, for documentation.
|
||||
|
||||
recnums
|
||||
Complex numbers. This should be loaded (e.g. with ,load-package)
|
||||
but needn't be opened.
|
||||
|
||||
search-trees
|
||||
Balanced binary search trees. See comments at top of
|
||||
big/search-tree.scm.
|
||||
|
||||
signals
|
||||
ERROR, WARN, and related procedures.
|
||||
|
||||
sort
|
||||
Online merge sort (see comment at top of file big/sort.scm).
|
||||
|
||||
(sort-list <list> <pred>)
|
||||
(sort-list! <list> <pred>)
|
||||
|
||||
sicp
|
||||
Compatibility package for the Scheme dialect used in the book
|
||||
"Structure and Interpretation of Computer Programs."
|
||||
|
||||
sockets
|
||||
Interface to Unix BSD sockets. See comments at top of file
|
||||
misc/socket.scm.
|
||||
|
||||
tables
|
||||
Hashed association tables. Keys are compared using EQ?.
|
||||
See doc/big-scheme.txt.
|
||||
|
||||
threads
|
||||
Multitasking. See doc/threads.txt.
|
||||
|
||||
util
|
||||
SUBLIST, ANY, REDUCE, FILTER, and some other useful things.
|
||||
|
||||
weak
|
||||
Weak pointers and populations.
|
||||
(MAKE-WEAK-POINTER thing) => weak-pointer
|
||||
(WEAK-POINTER-REF weak-pointer) => thing or #F
|
||||
#F if the thing has been gc'ed.
|
||||
|
||||
writing
|
||||
(RECURRING-WRITE thing port recur) => unspecific
|
||||
This is the same as WRITE except that recursive calls invoke
|
||||
the recur argument instead of WRITE. For an example, see
|
||||
the definition of LIMITED-WRITE in env/dispcond.scm, which
|
||||
implements processing similar to common Lisp's *print-level*
|
||||
and *print-length*.
|
||||
|
||||
-----
|
||||
|
||||
Acknowledgment
|
||||
|
||||
Thanks to Deborah Tatar for providing the Yeats quotation.
|
2536
doc/utilities.ps
2536
doc/utilities.ps
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue