Racket’s R6RS support does not conform with the standard in several known ways:
When guard catches an exception that no clause matches, the exception is re-raise ed without restoring the continuation to the one that raised the exception.
This difference can be made visible using dynamic-wind . According to R6RS, the following program should print “in” and “out” twice, but each prints once using Racket:
Along similar lines, continuation capture and invocation within an exception handler is restricted. Unless the exception is raised through raise-continuable , a handler can escape only through a continuation that is a tail of the current continuation, and a continuation captured within the handler cannot be invoked after control escapes from the raise.
The initial exception handler does not return for non-&serious conditions, but raise and raise-continuable both install an uncaught-exception handler (via parameterize and uncaught-exception-handler ) to one that returns for non-&serious conditions.
Inexact numbers are printed without a precision indicator, and precision indicators are ignored on input (e.g., 0.5|7 is read the same as 0.5).
Word boundaries for string-downcase , string-upcase , and string-titlecase are not determined as specified by Unicode Standard Annex #29.
A custom textual port must represent positions using integers, and the positions must correspond to bytes in a UTF-8 encoding of the port’s data. For custom ports (byte or character) that support both input and output, beware that buffered input can create a mismatch between the position implemented by the custom procedures and the port’s current position; the result from a custom position procedure is automatically adjusted to account for buffering, and setting the port’s position flushes all buffered bytes, but writing after a read does not automatically reset the port’s position to counteract the effects of buffering.
The bindings in a namespace produced by null-environment or scheme-report-environment correspond to R5RS bindings instead of R6RS bindings. In particular, => , else , _ , and ... are not bound.
Bindings for #%datum, #%app, #%top, and #%top-interaction are imported into every library and program, and at every phase level for which the library or program has imports.
Changed in version 6.0.1.4: When an identifier bound by letrec or letrec* is referenced before it is initialized, an exception is raised, instead of producing #<undefined>.