7 R6RS Conformance
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-raiseed 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: - (guard (exn [(equal? exn 5) 'five]) - (guard (exn [(equal? exn 6) 'six]) - (dynamic-wind - (lambda () (display "in") (newline)) - (lambda () (raise 5)) - (lambda () (display "out") (newline))))) - 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>.