higher-order functions

Simen kjaeraas simen.kjaras at gmail.com
Sun Oct 31 15:57:54 PDT 2010


spir <denis.spir at gmail.com> wrote:

> On Sun, 31 Oct 2010 17:31:54 -0400
> "Nick Sabalausky" <a at a.a> wrote:
>
>> "spir" <denis.spir at gmail.com> wrote in message
>> news:mailman.45.1288523296.21107.digitalmars-d-learn at puremagic.com...
>> >
>> >Also, I could not find functional methods like map, filter,
>> > reduce in std.functional. Where else? Also not in std.array.
>>
>> std.algorithm. But the docs for it do need to be improved.
>
> I find it very strange that map/filter/reduce take *strings* as func  
> expressions, instead of function literals:
> 	int[] arr = [ 1, 2, 3, 4 ];
> 	auto squares = map!("a * a")(arr);

They take both, in fact:

auto cubes = map!((a){ return a*a*a; })(arr);


> Why then have func literal? Func parameter is precisely the place where  
> programmers like to use them, isn't it? Isn't this a sign that D func  
> literals are not considered as practical enough?

For very short functions, strings are better, because of the length of
the 'return' keyword. Had D instead always returned the result of the
last line of a function (unless specified to be of void return type),
map/filter/reduce would likely not take strings.

-- 
Simen


More information about the Digitalmars-d-learn mailing list