Optional brackets around lambda expression
Rémi Forax
forax at univ-mlv.fr
Fri Jun 17 02:55:59 PDT 2011
On 06/17/2011 01:30 AM, Steven Simpson wrote:
> On 16/06/11 11:19, Ali Ebrahimi wrote:
>> Hi, how about this one:
>>
>> process( x -> x + 1 );
>> process( x -> { return x + 1; } );
>> process( x -> {
>> if (x == 0) {
>> return 0;
>> }
>> return x + 1;
>> });
> It's arguably more aesthetic. Is it harder to parse (infix vs prefix)?
> I imagine not significantly so, but parser writers' opinions surely
> carry more weight.
>
> I think you need some bracketing if there's more than one parameter:
>
> process( x, y -> x + y );
>
> You'd have to use more than just the grammar to determine that the first
> x is not a separate parameter, which would be a Bad Thing, right? So
> one of these, or similar, would be necessary:
>
> process( (x, y) -> x + y );
> process( ( x, y -> x + y ) );
> process( { x, y -> x + y } ); // closest to current syntax?
>
> Of those, I'd favour the brackets around just the parameters, based on
> the same argument that supports "#(params) expr", i.e. low precedence is
> only a problem for the most contrived cases. I'd also rather save the
> braces for statement lambdas.
>
> Still thinking of stripping away superfluities, can you get away without
> '->', provided you have brackets around the parameters? I think no, as
> "(x) -x" would be troublesome.
Is (x) -x a cast ?
Rémi
More information about the lambda-dev
mailing list