R6RS: Standard Language

1`` | Running Top-Level Programs
2`` | Installing Libraries
3`` | Libraries and Collections
4`` | Scheme Interoperability
5`` | R6RS Conformance
6`` | R6RS Libraries
| Index

Version: 4.0.2
contents index
← prev up next →

### 5`` R6RS Conformance

PLT Scheme’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 PLT Scheme:

  (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.

- Currently, 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.

- When an identifier bound by letrec or letrec* is referenced before it is bound, an exception is not raised; instead, the reference produces #<undefined>.

- 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.

contents index
← prev up next →