Lambda syntax, etc

Bill Baxter wbaxter at gmail.com
Wed Feb 4 14:32:51 PST 2009


On Thu, Feb 5, 2009 at 7:26 AM, BCS <ao at pathlink.com> wrote:
> Reply to Nick,
>
>> "Yigal Chripun" <yigal100 at gmail.com> wrote in message
>> news:gmd0u8$fg7$1 at digitalmars.com...
>>
>>> Andrei Alexandrescu wrote:
>>>
>>>> BCS wrote:
>>>>
>>>>> Hello bearophile,
>>>>>
>>>>>> I've taken a look at the syntax for lambda in other C-like
>>>>>> languages. This is from Functional Java:
>>>>>> http://functionaljava.org/examples#Array.filter
>>>>>>
>>>>>> In Functional Java you can write this D syntax:
>>>>>> (int i, int j) { return i % 3 == j; }
>>>>>> as:
>>>>>> { int i, int j => i % 3 == j }
>>>>>
>>>>> That syntax, and a few of the below, show the one major gripe I
>>>>> have with ultra-compact lambdas: it's hard to *quickly* spot the
>>>>> args/code transition.
>>>>>
>>>> Strings are immune from the problem. :o) Also they make for readily
>>>> recognizable code because they all use the same argument names.
>>>>
>>>> Andrei
>>>>
>>> Personally I prefer to have syntax for "blocks" like Ruby/smalltalk.
>>> given the following example function:
>>> int func(int a, delegate int(int) dg) { .. }
>>> // call func with [something in this spirit is my favorite]:
>>> func(someInt) { | int a, int b | return a+b; };
>>>
>>> compare with the current D syntax:
>>> func( someInt, (int a, int b) {return a+b;} );
>>> compare with a lamda syntax:
>>> func(someInt, { int a, int b => a+b } );
>>> blocks are more useful - they are not limited to just one expression,
>>> and I think are a more general construct. lamdas/array comps, are
>>> just special cases.
>>>
>> Agreed. This is what I had always been ultimately hoping for. I'd be
>> happy with the string stuff if that "wrong scope" issue gets fixed
>> (that I mentioned in another branch of this thread), but I'd still
>> prefer this (especially if the types for the params could somehow be
>> inferred and omitted like this: )
>>
>> ).
>>
>
> Why use this:
>
> "func(someInt) { |a,b| return a+b; };"
>
> when you can reuse syntax and get this for the same amount of typeing
>
> "func(someInt) (a,b){ return a+b; };"

I was about to say the same thing, but I think Yigal was just mixing
two distinct suggestions together:
1) the trailing delegates proposal (aka ruby block) and
2) A ruby-like syntax for delegate literals : {|a,b| return a+b;}

--bb



More information about the Digitalmars-d mailing list