Eighth draft of Scheme R7RS-small published

The eighth draft of the Scheme R7RS-small standard has just been published. This draft contains editorial corrections to the seventh draft, as well as changing the definition of eqv? on inexact numbers to the style of R6RS operational equivalence.

This draft will be used for the ratification vote by the Scheme community, though we will continue to correct mistakes before the final draft. Details on the ratification vote will be published at scheme-reports.org and on the scheme-reports@scheme-reports.org mailing list.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

R6RS adopted a number of

R6RS adopted a number of standard library functions long considered essential for functional programming: fold-left,-right, find, exists, for-all, filter (along with remv, remq, remove, remp), and partition. All these have been dropped from R7RS-small. I understand the pursuit of minimality in this version of the language but am nevertheless wondering what justified the rejection of precisely these functions. Could you share some of the rationale behind this decision, or perhaps point to where it can be read.

All those functions are

All those functions are definable in the core language. Definable but useful functions are saved for libraries - the "big" language. Many Scheme implementations special-cased common functions in unsound ways. Map, for instance, would crash if you tried to capture and invoke a continuation in the given function (something Matthew Flatt demonstrated years back). A smaller language can be more easily given a formal semantics so that you can prove equivalences between implementations and avoid (or at least identify) problems like with map.

"Dropping" R6RS library procedures

It is incorrect to say the R6RS list processing procedures were dropped from R7RS-small; rather, they were not added to it. The R7RS-small language is derived chiefly from R5RS, though it does borrow from R6RS in certain areas such as the library system, exception handling, and bytevectors.

In addition, most of the procedures you mention were provided in a way that is incompatible with the extensive, semi-standard, and widely used Scheme list processing library, SRFI 1 (written by Olin Shivers). This was the subject of considerable complaint during the R6RS ratification process. Rather than providing the R6RS procedures, R7RS-large will provide SRFI 1 itself as a standard part of the language. Of course, the R6RS procedures are trivially defined on top of SRFI 1.