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

Scheme BNF



    Date: Mon, 24 Mar 86 10:39:14 est
    From: Kent Dybvig <dyb%indiana.csnet at CSNET-RELAY.ARPA>

    I think it should not work on vectors.  It makes sense to me only in non-
    constants, and until we make a firm statement that vectors have some useful
    meaning in Scheme other than as constants, backquote should not work within
    vectors.  I also have some amount of hesitance about splicing a list into
    a vector, etc., and what that would mean.

The RRRS doesn't say that backquote doesn't work on vectors; I'm only
suggesting a clarification.  I assume it would work as described in RRRS
and as in Common Lisp, which is that the thing returned by form in ,@form
must be a list, whose elements are spliced into the vector.

    I do not like the use of EQUAL?.  If you don't like <casable>, how about
    <atom>?  Seriously, we need some term anyway, since it is the same thing
    accepted by EQV?.  What about <simple>?  Or <tag>?

I'm trying to avoid introducing new nonterminals into the grammar, and
nothing fits; self-evaluating doesn't work, because strings are
self-evaluating and symbols aren't; there's already a <simple something
or other> for backquote, but it includes strings.

    Also, it's been said before, but I think we should allow for the optional
    syntax of a single "<casable>" not in a list.

          <case clause> ::= (<datum> <sequence>)

This complicates the grammar, and (() <sequence>) is ambiguous.  This
was discussed at Brandeis, and this version of case was accepted
unanimously after a somewhat painful discussion; I'm only trying to make
it more precise.

        - Oh yeah, I forgot to mention in my previous message that I would like to
        document DELAY and FORCE, as non-essential special form and procedure,
        respectively.  I believe they're non-controversial, and desirable given
        that they have a central role in S&ICP and are a little tricky to
        describe and implement.
        
    If you don't mind, please send out your prose for these and include the
    appropriate code for them.  I don't have them in Chez Scheme yet and I'm
    not in the mood to think.

There's a description and implementation in Structure & Interpretation.
I'll send out my prose with the rest of the manual next week.

    I am uncomfortable with the use of <sequence> in light of the existence
    of sequence as a special form.  

Why?  I chose the term precisely because the term "sequence" was already
in use this way.  But I'll try to think of something better.

				    Furthermore, I think that <expression>+
    would be more expressive where it appears, and in Scheme there should be
    no confusion with the operator + or sign +.

The + meaning at least one won't be confused with + meaning the
character or identifier + because it will be in superscript and in Roman
typeface.

I was thinking of changing the definition of <sequence> to be
<statement>* <expression>, to be a little more descriptive, and to
emphasize the fact that the last value of a <sequence> becomes its
value.  I think this nonterminal improves readability; if I were to get
rid of it I'd also want to dispose of <consequent> and several others.
Anyone else have an opinion?

Jonathan