Optional brackets around lambda expression

Ali Ebrahimi ali.ebrahimi1781 at gmail.com
Mon Jun 20 02:04:06 PDT 2011


Hi Maurizio,
Exactly, with two differences:
1)
"->"  instead of  "=>"

2)
C# does not allow this:  process( -> 10 + 10 )  or process( -> { return 10 +
10; } )
In C# for nillary args parentheses is required and should be: process( () ->
10 + 10 )  or process( () -> { return 10 + 10; } )

I think for this case avoiding parentheses is readable and cleaner.

Best Regards
Ali Ebrahimi
On Mon, Jun 20, 2011 at 11:42 AM, Maurizio Cimadamore <
maurizio.cimadamore at oracle.com> wrote:

> Isn't this similar, if not identical, to the C# syntax?
>
> Maurizio
>
>
> On 18/06/11 04:33, Ali Ebrahimi wrote:
>
>> Hi all,
>>
>> to be crystal clear, i have to re-post my proposed syntax again.
>>
>> seperate syntax for expresion lambdas and statement lambdas :
>>
>> 1) Expression Lambdas:
>>
>> 1.1) if len(args)<= 1: optional parentheses
>>
>> [(] [arg0] [)] ->  expr
>>
>> sample1:
>> list.filter(  t ->  t.length()>  3 )
>>       .map(  t ->  t.barCount )
>>       .max();
>>
>> sample2:
>> students.where(s ->  s.degree>  10)
>>             .select(s ->  s.name); // .select(s ->  list(s.name,s.degree
>> ));
>>
>> sample3: empty args
>>
>> doRun( ->  out.println("lambda"))
>>
>> 1.2) if len(args)>  1: required parentheses
>>
>> (args ) ->  expr
>>
>> Sample:
>>
>> Sam2<Integer,Integer,Integer>  func5 = (x, y) =>  x * y;
>>
>> 2) Statement lambdas:
>> 2.1) if len(args)<= 1: optional parentheses
>>
>> [(] [arg0] [)] ->  { statement* }
>>
>>
>> list.filter(  t ->  t.length()>  3 )
>>       .map(  t ->  t.barCount )
>>       .max();
>>
>>
>> doRun( ->  { out.println("lambda"); })
>>
>> 2.2) if len(args)>  1: required parentheses
>>
>> (args ) ->  { statement* }
>>
>> Sam2<Integer,Integer,Integer>  func5 = (x, y) =>  { return x * y;};
>>
>>
>> Best Regards,
>> Ali Ebrahimi
>>
>> On 6/17/11, Maurizio Cimadamore<maurizio.**cimadamore at oracle.com<maurizio.cimadamore at oracle.com>>
>>  wrote:
>>
>>> On 17/06/11 15:48, Bob Foster wrote:
>>>
>>>> Maurizio Cimadamore wrote:
>>>>
>>>>> Of course you can lookahead; but certain expressions, as pointed out
>>>>> will remain ambiguous:
>>>>>
>>>>> process(x, y, z, a, b, c, d ->   a);
>>>>>
>>>> Assuming parenthesis are required for multiple arguments and optional
>>>> for single arguments, the example has only one parse, equivalent to:
>>>>
>>>> process(x, y, z, a, b, c, (d) ->  a);
>>>>
>>> I think we were discussing a proposed variant were parenthesis were
>>> optional all around (regardless of arity). If parenthesis are required
>>> only for arity>  1, then I agree with your analysis.
>>>
>>> Maurizio
>>>
>>>> Bob
>>>>
>>>
>>>
>>>
>


More information about the lambda-dev mailing list