[R6RS] final omnibus vote list
dyb at cs.indiana.edu
dyb at cs.indiana.edu
Tue Apr 25 13:51:55 EDT 2006
Omnibus Vote List
We're now on Step 3. Note that I've added a provision for changing a vote
to 'abstain' after the 7pm Tuesday deadline in order to force a revote
during our phone conversation.
Step 3: After the final list is posted and before 7:00pm EDT, Tuesday,
May 2, each of us will respond with a copy of the final list
with our votes added. List a vote or explicitly say 'abstain'
for each item on the list. (Any missing votes will be treated
as proxies to the chair---thanks in advance.) Except for the
votes, the response should be a verbatim copy of the final list.
Vote changes after 7:00pm EDT, Tuesday, May 2: Any editor may
change his listed vote on any item to 'abstain' up through noon
on Wednesday, May 3.
Step 4: For all votes with no abstentions and a clear majority, I will
declare an outcome. All other votes will be retaken during our
phone conversation on Wednesday, May 3.
Discussion, including requests for clarifications, on any of the listed
items can begin immediately and continue through the final votes on
Wednesday, May 3.
Respond to each item with "yes", "no", or "abstain" for all votes unless
specific options (A, B, etc.) are given, in which case respond with "A",
"B", ..., or "abstain".
1. unspecified value, three options:
A. leave as in r5rs: set!, set-car!, etc., return unspecified value
B. require return of new void value
C. require return of zero values
2. add (void) constructor if we choose option B on Vote 1
3. add #!void syntax if we choose option B on Vote 1
4. add (begin) expression
(begin) => unspecified value [or Vote 1 replacement]
5. add (define x) syntax
(define x) => (define x <void>) if we choose option B on Vote 1
(define x) => (define x <unspecified>) otherwise
6. extend case to use member in place of memv
7. add graph printing: #n= marks datum, #n# references
8. write uses graph printing when cycles are detected if we choose yes on
9. add mechanism for causing write to use graph printing if we choose yes
on Vote 7.
10. add when and unless forms:
(when e0 e1 e2 ...) => (if e0 (begin e1 e2 ...) <unspecified value>)
(unless e0 e1 e2 ...) => (if e0 <unspecified value> (begin e1 e2 ...))
11. relegate one-armed if to r5rs-compatibility library
12. add call/cc as an "official" abbreviation for call-with-current-continuation
13. add rec form:
(rec id e) => (letrec ([id e]) id)
14. add #n( vector prefix:
Examples: #5(0 1 2 3 4) equiv. #(0 1 2 3 4)
#8(0 1 2 3 4) equiv. #(0 1 2 3 4 5 6 7)
#1000(#f) equiv. #(#f #f ... #f) [ 1000 #f's ]
15. require write to use #n( prefix
16. allow write to use #n( prefix
17. add gensyms
(gensym) => gensym
(gensym? x) => #t iff x is a gensym
gensyms have both a pretty name and a globally unique name.
(symbol->string (gensym)) => pretty name
(symbol->unique-string (gensym)) => unique name
syntax for gensyms to be decided.
18. add case-lambda
(case-lambda [<formals> body1 body2 ...] ...)
where <formals> is just like a lambda <formals>, and the first clause
for which the actuals correctly map to <formals> is chosen.
19. add andmap
(lambda (f ls . more)
(let andmap ([ls ls] [more more] [a #t])
(if (null? ls)
(let ([a (apply f (car ls) (map car more))])
(and a (andmap (cdr ls) (map cdr more) a)))))))
20. add ormap
(lambda (f ls . more)
(let ormap ([f f] [ls ls] [more more])
(and (not (null? ls))
(or (apply f (car ls) (map car more))
(ormap f (cdr ls) (map cdr more)))))))
21. specify that append does not copy first argument when second is '()
22. modify quasiquote to support Alan Bawden's PEPM '99 nested quasiquote
23. mvbinding construct names, three options:
A. let-values and let*-values
B. let-values and let-values*
C. mvlet and mvlet*
24. add #!eof as external representation for eof-object
25. add support for formatted output
26. add cond-expand (SRFI 0)
27. add homogeneous numeric vectors
28. make () self-evaluating
29. add support for weak pointers
30. #t and #f must be followed by a delimiter
31. characters must be followed by a delimiter
32. add support for regular expressions
33. call the new void value, if we choose option B on Vote 1:
A. "unspecific value"
B. "void value"
[If we choose A, I presume we would use (unspecific) rather than
(void) if we choose yes on Vote 2 and #!unspecific rather than #!void
if we choose yes on Vote 3.]
34. Should the character comparison predicates be required to be:
35. flush sealed clause in records
36. As with quoted constants, an implementation is allowed to create a
new type each time the same define-record-type form is evaluated or to
treat the type as a constant value, so that, for example:
(let ((f (lambda (x) (define-record-type r ---) (if x r? (make-r ---)))))
((f #t) (f #f)))
may return either #t or #f.
A. leave it like it is
B. require the descriptor to be recreated each time
C. require the descriptor to treated as a constant
37. allow record? to be true of built-in types
38. The specification of make-record-type-descriptor has this:
If parent is not #f, and uid is not #f, and the parent is generative
(i.e. its uid is #f), an error is signalled.
Should this restriction be lifted?
39. pin down the dynamic environment in the before and after thunks of
40. flush named let if we choose "yes" on Vote 13
More information about the R6RS