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.


Reply via email to