[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Scheme-reports] 5. Program Structure

On Sun, Jan 6, 2013 at 6:19 AM, Andy Wingo <wingo@x> wrote:
I would encourage readers to take a look at section 5, as it is _the_
new section of the R7RS, and as such deserves a closer look.  It's only
a few pages long.  Print the pages out and enjoy them over coffee.

I think the division of valid kinds of declarations as "variable
definitions, syntax definitions, or record-type definitions" is pretty

FWIW I agree - maybe we can revert this, but it's
just ugly not a bug in the specification.
The typesetting of the "rename" kind of import declaration would benefit
by a newline after <import set 1>.

In the paragraph Marc mentioned:

    In a program or library declaration, it is an error to import the
    same identifier more than once with different bindings, or to
    redefine or mutate an imported binding with a definition or with
    set!, or to refer to an identifier before it is imported.

How does one refer to an identifier before it is imported?

(define-library (foo)
  (begin (bar))
  (import (only (bar) bar)))

I wanted to require all imports initially before any scheme,
but in the end we allowed shuffling, and implementations
are allowed but not required to perform the imports before
any code.

In 5.3.1, I think introducing `define' as `set!' is pretty wrong.  I
would reverse the order of the presentation and treat the
existing-binding case as special.

This is unchanged from R5RS.  Most of the document is
unchanged from R5RS.
In 5.3.2, it says:

    An expanded body containing internal definitions (but not syntax
    definitions or record definitions) can always be converted into a
    completely equivalent letrec* _expression_.

The parenthetical statement is unnecessary, as an expanded body has no
syntax definitions.

Indeed, removed.
Also it's not true, unfortunately!  Because in the next section, "5.3.3
Multiple-value definitions", we see the introduction of `define-values'
with an optimistically short specification and no corresponding

Define-values is just derived syntax, it doesn't need special
 I think you _cannot_ introduce define-values without
`letrec-values' and `letrec*-values' and corresponding semantics

I disagree.  I'd love to remove all three though.
Finally, in 5.5, the lack of specification of whether the
record-type-descriptor is a syntactic or value binding is unfortunate, I
think.  But OK!

This is consistent with SRFI-9 from which the form is taken.


Scheme-reports mailing list