This site is a static rendering of the Trac instance that was used by R7RS-WG1 for its work on R7RS-small (PDF), which was ratified in 2013. For more information, see Home. For a version of this page that may be more recent, see WG1Ballot1Harvey in WG2's repo for R7RS-large.


2010-11-30 12:30:41
2mering re-ballot voteshistory


WG1 New Ballot Items

WG1 Ballot Items To Finalize By Oct. 12

Working Group 1

#1 Which VCS do we use?

We need a VCS to keep track of changes to the standard as we start drafting it.

WG1 - Modules

#2 Module System




Honestly, after reading a bazillion emails on this topic, I'm having trouble understanding the differences among these proposals. They all claim not to screw up the REPL, which is the important thing. But if "wg2" were an option it'd definitely be my first choice.



WG1 - Core

#40 SRFI vs. R6RS precedence

Given equal technical merit and compatible extensibility for WG2, should WG1 prefer SRFIs or standardized behaviors from R6RS when faced with the choice. For example, a version of syntax-violation vs. syntax-error.


"Given equal technical merit" is so unlikely that I don't think this will ever actually be invoked. But the less like r6rs the better I like it!

#37 transcript-on and transcript-off

These were relegated to a compatibility library in R6RS. Do we want to keep them, drop them, or move them to a library?

Yes means to keep them in the core, as in R5RS, and no means to remove them entirely.

#38 letrec*

R6RS added letrec* and defined the semantics of internal define to be equivalent. Do we want to add this?

Choose letrec* just to add the syntax, define to change the behavior of internal define, or yes/both for both.


This extension allows the list arguments to be of unequal length, and stops the procedure whenever any of them run out. R5RS says the lists must be of the same length, R6RS says they should be.

Yes to allow unequal length.


This extension accepts a third argument, the equality predicate to be used. Alternatively we could use the R6RS predicates ASSP and MEMP.

#33 dynamic-wind


Removing this would require a strong rationale indicating that it's fundamentally flawed.

#34 multiple values

New to R5RS, do we reaffirm multiple values, specifically the procedures call-with-values and values?


Note if these forms are removed or placed in a module, for consistency none of the core library should return multiple values (as is the case in R5RS).

Yes to keep them, no to remove them, and module to relegate them to a module.

#54 optional arguments

Scheme's primitive mechanism of improper lambda-lists allows for optional arguments, but only with extra machinery. CL, DSSSL, and some Schemes provide a special word such as #!optional in lambda-lists, showing that the arguments which follow are optional and may have default values. SRFI-89 provides both optional and keyword arguments via lambda* and define* and without introducing #!foo special tokens.

Note the original ticket description mentions case-lambda, but this is easily provided as a separate module, and will be a separate item.

Much as I'd like optional arguments, I can't support srfi-89 because it depends on srfi-88, keywords, which are an incompatible change that will break r5rs programs.

#57 Simple randomness


#59 current-error-port

Pretty much all Schemes except embedded ones provide a notion of current error distinct from current output. Should this be exposed as a Scheme output port?

#60 Simple file operations

Should WG1 provide a module equivalent to the (rnrs files) module? This provides delete-file and file-exists?, which are pretty much necessities for any file-driven programming.

Note PortsCowan automatically includes these - voting for them here guarantees them even if not included by a specific proposal.

#64 Consistency in sequence procedures

Should we add the 10 procedures mentioned at CompleteSequenceCowan in order to make the Scheme sequence types consistent? They are `make-list copy-list list-set! string-map string-for-each string->vector copy-vector vector-map vector-for-each vector->string`, all with the obvious interface and semantics.

The whole reason we /have/ more than one sequence type is that each is better at some things than others. I don't think we should make it harder to learn which is which!

#65 Precision indicators

R5RS requires that Scheme support five indicators for the precision of floating-point values, not only the default e but also s, f, d, and l. Only a few Schemes actually support more than one precision, so this is mostly noise. Shall we make it an optional feature?


Should we add an EXACT-INTEGER? predicate? Currently, to determine whether a number is both an integer and exact, we must test for both, which requires some hackery or poor pattern matching to optimize in existing Scheme implementations.

#44 Testing function arity

We would like a standard for checking function arity. SRFI-102 proposes a way to check function arity:

Much as I'd like arity information, this is too complicated for wg1, because of its support for case-lambda.

#51 support for cyclic structures in primitives



Options are equal? to specify equal? must not terminate on cyclic input, r6rs to specify R6RS behavior for list? and length, srfi-1 to specify the SRFI-1 semantics (where length returns #f) and equal?+r6rs or equal?+srfi-1 are options for both.

I think I must be misunderstanding the issue about EQUAL?. You want to specify that it *must not terminate*? That seems, um, draconian.

#58 exact-integer-sqrt

Should WG1 include exact-integer-sqrt from R6RS? It allows square root operations in Schemes that don't provide inexact arithmetic, and has different semantics from sqrt, as it rounds its argument down to the nearest exact square.


r6rs/yes for R6RS semantics, list to use a list instead of MV, or single to only return s.

#61 finite? nan?

Shall we add these numeric predicates defined on the IEEE floating point values from #20?

#63 call/cc short name

Should we allow call/cc as an equivalent to call-with-current-continuation?

#53 Implicit BEGIN to implicit LET-NIL

In general, in places where an implict BEGIN occurs, it is possible to change this to an implicit LET-NIL and remain backwards compatible. Should we do this?

This is a meta-item to be used as a guideline, and specific places would need to be brought up for review.

WG1 - Exceptions

#18 Exception System


Do we use this, or parts of it, or a new exception system? The r6rs option is just for the core exception handling, not the conditions hierarchy.

#17 error

Do we support the near ubiquitous SRFI-23 error procedure, and if so should it use the SRFI-23 signature, R6RS, or type-dispatch on the first argument to allow both?

Note ExceptionHandlingCowan currently includes a SRFI-23 compatible error procedure.

WG1 - I/O

#30 string ports

Do we support string ports, as implemented by SRFI-6 or as by R6RS?

Note that currently PortsCowan provides SRFI-6 string ports.

#52 read/write cyclic data




WG1 - Macros


A popular extension, formalized in the R6RS, is to allow "(... <templ>)" in a syntax-rules template to be an escape for "<templ>". Do we use this, and if so what does (... <t1> <t2>) mean?

#39 syntax-error

Should we have syntax-error parallel to SRFI-23 error? This is evoked when macros are expanded.

#5 syntax-rules

Do we keep syntax-rules in the core, relegate it to a standard module, or leave it out entirely (possibly letting WG2 specify it).

Yes to keep in core, no to remove from Scheme entirely.

#10 identifier syntax

R6RS introduced identifier syntax as a way to expand identifiers in non-macro positions.

Orthogonal to the overall macro system and what types of expanders are provided, do we provide a means to specify identifier syntax?

#47 internal define-syntax

R6RS extends define-syntax to be allowed in local lexical contexts. Do we allow this as well?

#6 syntax-rules _ patterns

R6RS adds _ as a wild-card pattern, breaking some existing R5RS macros. Do we add the _ wildcard, or leave it as a normal identifier as in R5RS?

Yes to add, no for R5RS.

#8 SRFI-46 ellipse specifier in syntax-rules



Do we allow this?

#9 tail patterns in syntax-rules



R6RS further allows dotted tail patterns


where Px only matches a dotted list.

Do we allow either or both of these extensions?

WG1 - Numerics

#20 inexact infinities

R6RS provides support for inexact infinities and NaN objects. Do we keep these, and if so do we use the same literal syntax and arithmetic as in R6RS?

Yes to keep them with the same syntax and semantics of R6RS, or write in a separate proposal for some other syntax/semantics.

#21 limited type arithmetic

R6RS provides libraries for limited type arithmetic on fixnums only and flonums only (i.e. fx+, fl* etc.). Do we want these?

#22 mantissa widths


WG1 - Reader Syntax

#11 case-sensitivity






#15 #\foo character names

R6RS greatly extends the list of character names, as well as allowing #\xNN numeric escapes for characters. Do we allow any or all of these names?

mnemonic for #\tab and friends, numeric for #\xNN as in R6RS, and yes/both for both.

The exact list of added names is to be decided later.

#13 [brackets] as (parens)

R6RS allows [] brackets as identical to parenthesis, with the condition that they must balance. Do we accept this extension, propose some other use for brackets, or leave them unspecified?

Yes for R6RS, no for R5RS, or write in a proposal for some other meaning for brackets.

#14 alternate comment syntax



#16 symbol escapes

R6RS provides character escapes in symbols of the form \xnnnn;, where nnnn is 1-5 hex digits. Do we accept this extension? Do we also allow |...| to escape a whole symbol or a part of one?

In all existing standards pipes are reserved and the |...| syntax is unspecified. In most implementations it's recognized, but there are at least a few implementations where pipes are normal character constituents.

#67 string escapes

R6RS provides character escapes in strings of the form \xnnnn;, where nnnn is 1-5 hex digits, as well as \n, \t etc. C-like escapes for common control characters. Do we accept either or both of these extensions?

WG1 - Strings and Chars

#24 char and string folding

R6RS provided operations to alter the case of strings and characters (upcase, downcase, titlecase and foldcase) using locale-independent Unicode mappings. Do we provide equivalent mappings?

Note in a Unicode implementation individual character casings are incomplete, and string case is not defined as a simple mapping of case over the constituent characters.

Note UnicodeCowan currently provides mappings at both levels.

#26 string normalization



Note UnicodeCowan currently provides specific normalization procedures.

#27 string-ref/set! access time

R6RS suggests string-ref and string-set! work in O(1) time, implying strings are implemented as character arrays. Do we reaffirm this?

Yes for required constant time.

Yes unless this somehow prevents Unicode strings, I guess.

#23 character set

R5RS said almost nothing about character sets. R6RS specified full Unicode. Do we specify a character set, or limit the options in any way?


Thank you John for brilliantly finding a way to make everyone happy (where "everyone" = ASCII, Unicode, case-folders).

WG1 Controversial Ballot Items

WG1 - Core

#50 Byte-Vectors



But I'd really like a better name than "blob"!

#69 Parameters

Most Scheme implementations provide some form of dynamic bindings such as those provided by SRFI-39 parameters.

My instinct is to vote "no" on everything, but I'm swayed by the argument that if we don't do it we'll get some hideous monstrosity foisted on us by wg2. :-)

#32 user-defined types


WG1 - Libraries

#36 hash-tables
