James Fisher:
> To date, I've been using D in much the same way I used C++, without heavy
> use of templates. Now I'm trying out a more functional style using
> std.algorithm. However I'm pretty much stuck at the first hurdle: map.
Welcome to functional D :-)
> The most general interfaces I can see are InputRange(E) and OutputRange(E).
In D language there is about as much support for OOP as in Java (and more), but
in practice OO interfaces are not used significantly in the D standard library.
So those are a different kind of "interfaces", they are a bit more like C++0x
Concepts, they are very statically typed. So while they are organized in a
hierarchy, you can't assign them as OO interfaces.
You generally use type inference to assign the type of map. In functional
programming a bit of type inference is not optional, it's almost needed.
map() in D is lazy, it doesn't return an array, but a lazily iterable range. If
you want an eager dynamic array you may use array():
array(map!((a) { return a * a; })(start));
If you don't want to use type inference for the return result of map, you have
to take a look at the source code of std.functional, read what type is exactly
map, and copy it. Generally this is not done in normal user code.
Bye,
bearophile