R6RS Errata

Revised5.97 Report on the Algorithmic Language Scheme

Title page
Will Clinger's name should not be listed among the current editors on the main report and library documents.
§ 2
Requirement levels under "should not". The verb "mean" should be "means" since the subject is singular.
§ 3.2, first sentence
"It useful to" ⇒ "It is useful to"
§ 3.3, first para, third sentence
The phrase "representing as flonums" is awkward. Perhaps "represented by flonums" is meant.
§ 4.2.1, production for <string element>
The two occurrences of <intraline whitespace> should have a * after them.
§ 5.2, last para
"... binding of the identifier that established [should be: establishes] the innermost ...". Similar sentences in this section use the present tense.
§ 5.10, first sentence
"... strings, hashtables, [and] records implicitly refer..."
§ 5.10, fourth para
"read-only-memory" should be "read-only memory".
§ 6.1, second para
"For example <identifier> ..." should have a comma after "example".
§ 7.1, fourth bullet of beginning itemize environment
Replace "The definitions may be both for local (unexported) and exported bindings, and the set of initialization expressions to be evaluated for their effects." by "The definitions may be both for local (unexported) and exported bindings, and the expressions are initialization expressions to be evaluated for their effects.
§ 7.1, near end
"The names library, export, import, for, run, expand, meta, import, export, only, except, prefix, rename, and, or, >=, and <= appearing in the library syntax are part of the syntax and are not reserved, [...]" This should also include the name not as part of the syntax and not reserved.
§ 7.2, second sentence
"Specifically, if a macro transformer is defined by a procedure that calls a procedure from another library, then the latter library must be run when expanding the latter. The latter may not be needed when the former is eventually run as part of a program, or it may be needed for the former program's run time, too." ⇒ "For example, if a macro transformer calls a procedure from library A, then the library A must be instantiated before expanding any use of the macro in library B. Library A may not be needed when library B is eventually run as part of a program, or it may be needed for run time of library B, too."
§ 7.2, note
The Note: at the end will be removed.
§ 10
the example for the macro expansion algorithm misses a pair of parens in the use of defun:
(defun even? (n) (or = n 0) (odd? (- n 1)))
(defun even? (n) (or (= n 0) (odd? (- n 1))))
§ 10
The result of the second example, the let-syntax one, can't be (e). I think it should be (3), but I haven't tested it.
§ 11.2.1
"The first from of define ..." &rArr "The first form of define ...".
§ 11.3, title
Replace "Bodies and sequences" by "Bodies".
§ 11.3, first sentence
"... let*-values, letrec, [or] letrec* expression[,] or that ..."
§ 11.4.6
strike "The let* keyword could be defined in terms of let using syntax-rules (see section ...) as follows:"
The various reference to sample definitions will be replaced by "Sample definitions of all the binding forms of this section in terms of simpler forms are in appendix B" near the beginning of the section.
§ 11.4.6, implementation responsibilities for letrec*
"Implementations must detect references to a <variable> during the evaluation of the <init> expressions." ⇒ "Implementations must, during the evaluation of an <init> expression, detect references to the value of the corresponding <variable> or the <variable> of any of the bindings that follow it in <bindings> (using one particular evaluation order)."
§: 11.7.1, expt
expt will be deleted from the list of procedures that always return exact values for exact arguments. Instead, a sentence will be added: "Moreover, the procedure expt must return the correct exact result provided its first argument is an exact real number object and its second argument is an exact integer object."
§ 11.9, for-each>
Replace the return value 4 specified in the second example by "unspecified".
§ 11.11, Note
"Unicode defines a standard mapping between sequences of Unicode scalar values [...] and human-readable ``characters''." ⇒ "Unicode defines a standard mapping between sequences of Unicode scalar values [...] and sequences of human-readable ``characters''."
"However, the Unicode scalar values in this range, the so-called surrogates [...]" ⇒ "However, the Unicode code points in this range, the so-called surrogates [...]"
Appendix B, letrec
"read to or write from" ⇒ "read from or write to"
Appendix E, 14th bullet
"The !#r6rs comment" ⇒ "The #!r6rs comment"

Standard Libraries

§ 2.9
utf16->string!utf16->string, utf32->string!utf32->string
§ 3
"An implementation may check whether handler is an appropriate argument before applying it." ⇒ "An implementation may check whether proc is an appropriate argument before applying it."
§ 6.2
"reocrd" ⇒ "record"
(define-record-type frob
  (fields (mutable widget getwid setwid!))
  (protocol
    (lambda (p) (p (make-widget n)))))
(define-record-type frob
  (fields (mutable widget getwid setwid!))
  (protocol
    (lambda (p) 
      (lambda (n) (p (make-widget n))))))
§ 6.3, make-record-constructor-constructor

"The procedure returned by protocol should call p once with the number of arguments it expects" ⇒ "The procedure returned by protocol should call p once with the number of arguments p expects"
The procedure returned by protocol should call n once with the number of arguments it expects, call the procedure p it returns once with the number of arguments it expects" ⇒ "The procedure returned by protocol should call n once with the number of arguments n expects, call the procedure p it returns once with the number of arguments p expects"
"Protocol may be #f, specifying a default value that accepts one argument for each field of rtd (not including the fields of its parent type, if any)." ⇒ "Protocol may be #f, specifying a default constructor that accepts one argument for each field of rtd (not including the fields of its parent type, if any)."
"If rtd is an extension of another type, then parent-constructor-descriptor must be either #f or itself specify a default constructor. In this case, the default protocol procedure behaves as if it were:" ⇒ "If rtd is an extension of another type, then parent-constructor-descriptor must be either #f or itself specify a default constructor, and, the default protocol procedure behaves as if it were:"
"If rtd is an extension of another record type, and parent-constructor-descriptor or protocol is #f, protocol must also be #f, and a default constructor descriptor is as described above is also assumed." ""If rtd is an extension of another record type, and parent-constructor-descriptor or the protocol of parent-constructor-descriptor is #f, protocol must also be #f, and a default constructor descriptor as described above is also assumed."
§ 6.3, 11th para
"Moreover, if record-rtd (see ``Inspection'' below) is called an instance of the record type [...]" ⇒ Moreover, if record-rtd (see ``Inspection'' below) is called with an instance of the record type [...]
"make-record-type" should read "make-record-type-descriptor":
"If fields is modified after make-record-type has been called..." ⇒ "If fields is modified after make-record-type-descriptor has been called..."
§ 7.1, examples
§ 8.2.3
"line for flushing upon line endings or reading until line endings" ⇒ "line for flushing upon line and reading up to line endings, or other implementation-dependent behavior"
§ 8.2.6, port-has-set-port-position!?

"The port-has-set-port-position? procedure" ⇒ "The port-has-set-port-position!? procedure"
§ 11.2, fxarithmetic-shift
(* fx1 (expt 2 fx2))(floor (* fx1 (expt 2 fx2)))
§ 11.2, fxarithmetic-shift-left
fixnum-fx-
§ 11.2, fxcopy-bit
"The fxcopy-bit procedure returns the result of replacing the fx2th bit of fx1 by the fx2th bit of fx3 ..." ⇒ "The fxcopy-bit procedure returns the result of replacing the fx2th bit of fx1 by fx3 ..."
§ 12.8, definition of syntax-rules
The definition of syntax-rules will be replaced by:
(define-syntax syntax-rules
  (lambda (x)
    (syntax-case x ()
      [(_ (k ...) [(_ . p) t] ...)
       #'(lambda (x)
           (syntax-case x (k ...)
             [(_ . p) #'t] ...))])))
Moreover, the phrase ", and that at most one fender is present in each clause" will be removed.
§ 16, eval
"environment-specifier" ⇒ "environment"
"and environment-specifier must be a library specifier" ⇒ "and environment must be an environment"
§ 19, null-environment
The last sentence will be extended by ", including bindings for =>, ..., and else that are the same as those in the (rnrs base (6)) library".
§ 19, scheme-report-environment

interaction-environment will be added to the list of omitted identifiers.
The last sentence will be extended by ", and the keyword bindings, including =>, ..., and else, are the same as those described in this report".

Non-normative appendices

Appendix C
replace "For raise forms a <cond clause> may take one of the follow forms:" by "For guard" forms a <cond clause> may take one of the following forms:"

Rationale document

pg 1
The text under "*** DRAFT ***" points out that the Rationale document is not formally part of the ratification process of the report. This also means that the document is still subject to editorial changes, particularly additions.
various places
artefact ⇒ artifact
§ 3.1, first para, first sentence
Infinities and NaNs and [delete] are ...
§ 4.1.1, pg 4, para 3 line 1
remove extra space before the comma in "Scheme ,"
§ 4.2, para 1
a kind of command" ⇒ "a kind of comment"
chapter 6
"distinguishes the responsibilities of the implementation from those of the implementation" ⇒ "distinguishes the responsibilities of the programmer from those of the implementation"
§ 7.7, fifth sentence
... natural means for represent [should be representing] hierarchical ...
§ 7.7, sixth sentence
The hierarchical structure makes it easy formulating [should be to formulate] policies for choosing unique names, [no comma needed] or possible storage formats in a file system.
§ 8, first para, fourth sentence
... was not really sufficient do [should be to] describe ...
§ 8, second para, second-to-last sentence
... being able to distribute programs as [should be is] one of the goals ...
§ 10, first para, first sentence
... macro expansion is considerable [should be considerably] more involved ...
§ 11.5.1, first sentence
"The above definition of eqv?" -- delete "above", since it's not referenced above
§ 11.6.5, para 1
t2 ⇒ t2
§ 11.6.7, first sentence
"integer behavior" ⇒ "integer?" (missing question mark and redundant "behavior")
§ 11.7, first para, second sentence
"The primary goal ... were [should be was] to improve ..."
§ 11.9.2, pg 13, col 2, 1st display
remove extra space after "values"
§ 11.9.2, last para
"preventing a program to make" ⇒ "preventing a program from making"
§ 18.5, para 2
"chooses to represent that ADT by a record type"
§ 18.5, last sentence
"that use record" ⇒ "that use records"
§ 20.5, last sentence
"some procedures many procedures" ⇒ "many procedures"
§ 20.7, 1st sentence
"is fresh" ⇒ "are fresh"
§ 21, second para, second-to-last sentence
extra space in the word "insufficient".
§ 25, first para, first sentence
... or subsets of a finite sets [should be set] to describe ...
§ 26, second para, first sentence
remove extra space after "rnrs".
§ 27, first bullet
"... specification of higher-procedures" should be "higher-order procedures"
§ 28, first sentence
The presence of mutable strings [causes] problems ...