Re: Another approach to lambdas
Sebastian <news@seyweiler.dyndns.org> writes:
Yes. I specifically meant the syntax. Java 8 lambda syntax is reasonably
OK, but I wish they would have entirely dispensed with the need to
explicitly refer to the single method in a functional interface.
Compare
sumList.apply(map(x -> sumList.apply(x), matrix)); (*)
to
sumList(map(x -> sumList(x), matrix)); (**)
where
sumList is something like
Function<List<Integer>, Integer> sumList = x -> foldr((a,b)->a+b, 0, x);
(*) is actual Java 8 syntax, but I wish it were (**). I even guess that
would have been possible with a bit of compiler magic.
public class Main
{ public static void main( final java.lang.String args[] )
{ final java.util.List< java.lang.Integer >list = java.util.Arrays.asList( 1, 2, 3 );
java.lang.System.out.println( list.stream().reduce( 0,( x, y )-> x + y )); }}
6
public class Main
{ public static void main( final java.lang.String args[] )
{ final java.util.List< java.math.BigDecimal >list
= java.util.Arrays.asList
( new java.math.BigDecimal( "3" ),
new java.math.BigDecimal( "4" ),
new java.math.BigDecimal( "5" ) );
java.lang.System.out.println
( list.stream().reduce
( new java.math.BigDecimal( "0" ),
java.math.BigDecimal::add )); }}
12
C++, Java, Perl, and JavaScript took their common syntax from C.
That's nice: one does not have to always learn a new syntax.
But C did not have function literals, now every derived
language started to invent its own syntax!
JavaScript:
function(...){}
, C++:
[...]{}
, Perl 6:
->...{}
, and Java:
...->{}
. That's sad, because now every of those languages has a
different syntax for essentially the same thing. I like
C++'s best, since it is the most unobtrusive! I wonder why
the Java owners did not just copy it. After all, in the 90s
Java was advertised as a language that is easy to learn for
C++ programmers.
Church's lambda expressions were called ?lambda expressions?
because they contained a literal greek lambda letter. Java's
?()->{}? is not a ?lambda expression?, it's an arrow expression!