If you look at an earlier thread you can see that I also was (and still am?) confused by this. I think some clarification is needed.
It is not stated what this means. I guess maybe it means that writing out (1 2 3) and reading it back in during the same run will give a value that is equal? to the original. Is that correct?
Yes.

 * Several syntactic datums can
   represent the same datum value,

I'm unsure what is meant by this. For example, do the two 1s in (cons 1 1) count as distinct syntactic datums that may represent the same value, or does this only refer to the fact that 1.0 and 1.00000 may represent the same value (as stated in chapter 3)?

Syntactic datums are just strings of characters. So yes the strings "1" are the same.
 * but the datum value corresponding to a
   syntactic datum is uniquely determined.

I also find this confusing. Clearly this cannot mean uniqueness with respect to eq? Does this mean uniqueness with respect to equal? ? Or could the two syntactic datums in (cons "abc" "abc") represent different datum values (given that they are considered as separate syntactic datums, which is unclear)?
I think you are on the wrong track here. Syntactic datums and datum values are not Scheme objects/values, and it makes no sense to apply Scheme function to them.

Chapter 3 (introduction) says:

 * A syntactic datum can be used in a
   program to obtain the corresponding value using quote.

What is meant by "the"?
_The_ (unique) datum value corresponding to a syntactic datum is described by grammar and text spread out over chapter 3.

* Moreover, valid Scheme expressions form a subset of the syntactic datums.

Is this actually true? I believe that there are valid Scheme expressions represented by syntax objects that are not syntactic datums as described by the grammar of this section. For example, macro-generated Scheme expressions may be valid only if identifiers are interpreted as entities containing substitutions/renamings. If this extra data is removed, the expression would cease to be valid.
I think "Scheme expression" here is to be interpreted as the program text before any macro expansion.

Also, is the intent to talk only about expressions or forms?

  * Note that several syntactic datums may represent the same object, a
    so-called
    datum value. For example, both "#e28.000"
and "#x1c" are syntactic datums representing the exact integer 28; The syntactic datums "(8 13)", "( 08 13 )", "(8 . (13 . ()))" (and more) all
    represent a list containing the integers 8 and 13.

This paragraph promises to illustrate syntactic datums that represent the same object. However, I believe the language "the same object" at least strongly suggests eq? to many Schemers. However, the examples are of syntactic datums that give rise to objects that may not be eq?
I agree, "same" implies "eq?" for me too. And here the report actually talk about objects.

The next line says:

 * Syntactic datums that denote equal objects are
   always equivalent as forms of a program.

Perhaps changing equal to equal? may clarify what is meant by this (if it is in fact true - see comment about syntax objects above).

Michael Sperber already agreed to add a reference to "equal?" here.
 * A syntactic datum occurring in program text is often called a form.

Does this mean that the datum (x 1) in (let ((x 1)) x) is a form? How about
the 1 in (display (quote 1))?

Pass. (I think the answer is "no" but I prefer if someone else fill in.)

Section 4.8 says:

* It is desirable for constants (i.e. the values of literal expressions) to
   reside in read-only-memory.

I assume that the term "constant" here refers to what is called "datum value"
in section 1.9.  If so, it may be better to use the same terminology.

No not the same as datum value. Of the following three expression the first to are "literals" but the third is not. All are datum values.

"abc"
(quote (1 2 3))
(list 1 2 3)

To sum up my understanding of the issue: "Syntactic datums" are just strings of characters as defined by the grammar. "Datum values" are something more abstract, described only indirect via a function from syntactic datums. Datum values can be "instantiated" as Scheme values, for example with "quote" or by using the "read" procedure. No all Scheme values have a corresponding datum value, for example a circular list.

/Mikael


_______________________________________________
r6rs-discuss mailing list
[email protected]
http://lists.r6rs.org/cgi-bin/mailman/listinfo/r6rs-discuss

Reply via email to