Explorer "Almost Scheme" status - February 11, 1989 What exists now has been rather hastily thrown together. It is usable, but is not complete, stable, or reliable. Currently, it has most of the features of the Revised^3 Report plus many additional features from PC Scheme. There are also a few features included for compatibility with MIT's "Pseudoscheme" and the TI internal Scheme to Common Lisp translator. The known omissions from the Scheme report are: * Section 4.2.1 -- COND does not support the optional "=>" syntax. * Section 4.2.6 -- The special form symbols QUASIQUOTE, UNQUOTE, and UNQUOTE-SPLICING are not supported (but the equivalent syntax "`", "," and ",@" does work). * Section 6.5.2 -- The concept of exactness of numbers is not implemented, although the associated functions and syntax are supported and try to do something reasonably close to the intent. Integers and ratios are considered to be exact and floating point numbers are considered inexact. * Section 6.5.7 -- Numerical output formats RAT, RECT, and POLAR are not yet supported by NUMBER->STRING. * Section 7.1.1 -- The complex number syntax is not yet supported. The following features of PC Scheme are not supported yet: * Creating windows or changing their attributes. * Graphics functions SET-CLIPPING-RECTANGLE and SET-PALETTE!. * SCOOPS. * Engines. * The object hash table (functions OBJECT-HASH and OBJECT-UNHASH). * Environments as first-class objects. (However, there is an experimental partial implementation in file "ENVIRONMENTS".) * AUTOLOAD-FROM-FILE. If you are interested in any of the missing features above, you are invited to volunteer to implement it. Refer to file "GUIDE.TEXT" for information on using the system. Refer to file "PROPOSAL.TEXT" for the design goals and intentional restrictions. In particular, note that continuation objects are limited to having dynamic extent. The file "INDEX.TEXT" contains an alphabetical list of the functions that are currently defined and the file in which each is defined. A lot of work remains to complete the functionality of PC Scheme, to test it all, and to address performance issues. A major handicap is the lack of a comprehensive set of regression tests. Some currently known bugs (besides the missing features noted above): * In the evaluator, DO does not create new bindings each time around the loop; this affects the semantics of any closures over the iteration variables. It should be working correctly in compiled code. * If the argument of STRING->NUMBER contains a decimal point, the value will be considered to be base 10 regardless of the radix argument. * COMPILE-FILE compiles the whole file and then loads the whole file, which doesn't exactly match the PC Scheme behavior of installing each function as it is compiled. * Some things are defined by macros which will be broken if the user creates local bindings that shadow primitives such as CAR, CONS, AND, OR, NOT, or APPLY. * Symbol names are not permitted to contain colons except as used to designate an existing Common Lisp package. * The current implementation of streams does not exactly match PC Scheme in that streams are implemented as lists instead of being a distinct data type. This has an efficiency advantage, but has the disadvantages that STREAM? is not meaningful and hence is not implemented, and the null stream is indistinguishable from an empty list. * The reader considers a number that ends in a period to be a decimal integer instead of a floating point number. * The function CURRENT-COLUMN sometimes returns a value smaller than it should be when the port is a file. [This is actually due to a deficiency in Explorer Common Lisp -- ref SPR 5952] * Use of *THE-NON-PRINTING-OBJECT* has the intended effect only when used as the value returned from a function executed at top level. If it is assigned to a variable, the false object is stored. * After switching back and forth between windows, the Listener sometimes forgets that it should be displaying the Scheme mode prompt (even though it is still evaluating in Scheme mode). * Complex numbers are written and read using Common Lisp syntax. * TRACE-ENTRY, TRACE-EXIT, BREAK-ENTRY, and BREAK-EXIT are defined, but don't produce quite the same results as in PC Scheme. * Names defined by DEFINE-INTEGRABLE cannot be shadowed by a local binding. Other minor differences from PC Scheme: * Floating point constants default to single precision, while PC Scheme uses only double precision. Note that constants can be prefixed with #L to make them double precision. The default can be changed to double precision by: (SET! LISP:*READ-DEFAULT-FLOAT-FORMAT* 'LISP:DOUBLE-FLOAT) * PCS-INTEGRATE-DEFINE defaults to false instead of true since that way is more efficient on the Explorer. * Uninterned symbols are written with the prefix "#:". If this is considered undesirable, it can be prevented by: (FLUID-LET ((LISP:*PRINT-GENSYM* #F)) ... ) * When SORT! is called with only one argument, strings are placed after lists, while PC Scheme puts strings before symbols and lists. * Changing the value of PCS-DEBUG-MODE has no effect. * A DO without any expressions following the test does not return the value of the test. There are currently no plans to support this as a product. It may be released as part of the "PUBLIC" directory in some future release. If you would like to be on a mailing list to possibly receive notices about future upgrades, add yourself to the file "DSG:MAILING-LISTS;SCHEMERS.MLIST". Bug reports are welcome; send Explorer mail to GRAY@DSG. However, since this is not a supported product, bug fixes will mostly be done on an "if and when I feel like it" basis. If you would like to fix somethi