return when desugaring to closures
dherman at ccs.neu.edu
Wed Oct 15 12:31:18 PDT 2008
> Please specify what you are proposing. The one proposal I've seen is:
> Expression ::= ... | lambda Formals Statement
Yes, that's what I meant, or at least what I thought Yuh-Ruey meant.
> This is not particularly useful because then even assign a lambda to a
> variable would be a syntax error,
Why is that?
> and you'd introduce a bizarre asymmetry into the ExpressionNoIn case.
Can you explain?
> The questions you'd have to answer are:
> - Where in the expression grammar would you introduce a lambda?
I assume you mean what is the precedence. I'm not sure, although
presumably it would be about the same as `let' expressions.
> - Is lambda a reserved word?
This is a relevant question for any number of alternative syntaxes for
lambda. I would think it would be the same as `let'.
> - How does it interact with semicolon insertion? As written, if the
> Statement were an expression statement then the semicolon would be
Why is that? If that were so then I would be absolutely opposed to
Yuh-Ruey's syntax: the appeal of the idea was unifying the
expression-body and statement-body form into one single definition.
> - Do you really want to have extra semicolons in the middle of
> statements? Now you're forced to accept things like the following:
> for (; lambda() x++;, lambda() y++;,; lambda() z++;) ...
Thanks, these were the kinds of nastinesses I was worried about.
Arbitrarily mixing statements into expression contexts does indeed
appear to get pretty convoluted. Perhaps just enforcing the block form
of lambda is enough to keep things from getting too mixed up,
specifically, by enforcing syntactic delimiters between expressions.
> Overall, this syntax does not look promising. It's likely to get you
> into complexity trouble.
Do you prefer (lambda Formals Block | lambda Formals Expression)?
[Personally I'm fine with that.] Or do you oppose any lambda expressions
at all? Or did you have something else in mind?
More information about the Es-discuss