Hello all,
First of all, I should admit that I have only begun reading about sweet
expressions in the last hour or so. I don't yet understand the rules.
I began to try to learn about them by jumping directly to the
"Specification" section of SRFI-110. I'm sorry to say that I find that
section extraordinarily unclear. Below, I've made notes about the parts
that I found confusing.
No doubt, I could find answers to all of these questions by reading the
rest of the document more carefully, and/or by reading the website of
the Readable Lisp S-expressions Project. However, I don't think I
should have to. The specification should stand on its own to a
reasonable extent, IMO anyway.
[In the list below, "first list", "second list", and "third list" refer
to the three numbered lists of rules in the "Basic specification"
section.]
* "term" is used before it is defined.
* The concepts of "parent" and "child" are not defined.
* The use of the term "parameter" is confusing. This is a datum reader
after all, which deals with "lists", not "parameters". I'd prefer for
it to describe more clearly what data structure is created.
* Item 1 (first list): What is an "indented line"? Does that mean any
line with non-empty indentation, or does it mean "indented more than
some other line"? If the latter, which other line?
* Item 3 (first list): Does "multiple terms" mean "multiple terms on
the same line"? If so, isn't this redundant with item 2 (but IMO
more clearly stated)?
* Item 4 (first list): What is an "empty line"? Is whitespace allowed?
What about exclamation points? What about comments?
* Item 6 (first list): What does "prefixed" mean?
* Are '!', '$', '\\', '$$$', '<*' and '*>' recognized as special tokens
only if they are surrounded by whitespace? (All of these characters
except for backslash are considered extended alphabetic characters in
standard scheme.)
* Later in the design rationale, it is mentioned in passing that '!'
is only recognized as indentation at the beginning of a line. Does
that mean before any whitespace? If so, that fact should be
mentioned in the specification (which currently suggests that '!'
could mixed freely with spaces or tabs).
* Item 1 (second list): What are lines with "initial indent"? What
happens if a line is not consistently indented? What is meant by
"preceding line"? Does that mean "preceding non-empty line"? (if
so, what does "empty line" mean?)
* Item 3 (second list): What does "completely ignored" mean? How does
this relate to the "preceding line" of item 1 (second list)?
* Is '!' considered whitespace?
* Item 5 (second list): What does it mean for an expression to "start
indented"?
* Item 6 (second list): Do datum comments ignore intervening '!'
characters as well?
* In the rules that say neoteric expression are read (not sweet
expressions), how are '!', '$', '\\' and '$$$' handled?
* Item 7 (second list): What does it mean exactly that block comments
are "removed"?
* Item 1 (third list): Regarding GROUP, what does it mean "it
represents no symbol at all, located at that indentation"?
* Item 2 (third list): What does "restart list processing" mean? What
is "the right-hand-side"? What are "its sub-blocks"? What happens
if there's more than one '$' on a line?
* Item 3 (third list): Does "indentation" mean "non-empty
indentation"? (and does that definition apply generally?) In the
"entire sweet-expression that follows" what is considered the
indentation of the first line of that expression?
* Item 4 (third list): What are "un-indented sweet expressions"?
* Why is there a distinction made between "advanced sweet-expression
features" and the rest of the spec?
* In the paragraph immediately following the third list:
* "MUST only be accepted ... is active"
=> "MUST NOT be accepted ... is not active"
* When are sweet expressions accepted but "indentation processing"
is not active? (in collecting lists?)
* What does it mean that a "character sequence" begins with
"exactly the marker's first character"? In "{$}", why is the '$'
not considered a "character sequence"?
* IMO, it should probably be specified whether "#!no-sweet" disables
curly-infix.
* In the examples, why are the s-expressions not indented according to
the nearly-universally accepted conventions?
* The use of '$', '$$$', '<*', and '*>' as special tokens should be
mentioned in the "Backwards compatibility" section. These are all
considered extended alphabetic characters by standard scheme.
* If an implementation implements sweet expressions by default, then
they will have to be careful about writing symbols that contain '$',
'<*' or '*>'.
* In the design rationale, there's a section entitled "Blank lines".
Are these the same as the "empty lines" referenced in the
specification? If so, I suggest using just one term, and defining
it clearly in the spec.
* When you speak of "traditional abbreviations", you might want to
make a suggestion about how to handle additional non-standard
abbreviations. In particular, the abbreviations #', #`, #, and #,@
are widely used by the syntax-case macro system.
Regards,
Mark