On Sat, Jul 31, 2010 at 20:07, Bruno Medeiros
<brunodomedeiros+s...@com.gmail> wrote:

> Consider the familiar functional idiom "map" (
> http://en.wikipedia.org/wiki/Map_%28higher-order_function%29)
>
> What would you call such a function parameter (either for map or just
> generally).


What parameter?



> That is, what would you call a function that takes one parameter of some
> type, and produces another object/data from that input?
>

Do you mean the partial application of map, is in D with map!"a*a" ?
(without any argument).


Is there any usual name/term for this, I wonder, or not really?
>
>
Not sure if I'm saying something obvious to you, but map is a higher-order
function: a function that acts on functions, either taking them as
parameter(s) or as results. So are filter, fold/reduce, unfold, scan,
compose, power (of a function: power(f, n) = f(f(f(... n times)))
For map, filter or reduce, the function is just a parameter among two. Most
of the time, what they create is not a function.

In curried language like Haskell, you can easily create the partial
application of a function: n-args functions are in fact n 1-arg functions
each delivering the next step (a function).
So map x*x [0,1,2,3,4] is [0,1,4,9,16], but map x*x is a function, waiting
for an iterable and returning its transformation through x*x. In not-curried
language, map x*x is considered a partial application of map.

Note in D the asymmetry between the function which is a compile-time
argument and the range, a runtime argument. A recent change in Phobos (for
the next release) by Andrei will allow us to do:

alias map!"a*a" squarer; // squarer is a _generic_ function taking any
range, as long as the operation a*a makes sense for the range elements.


Before, we could do this with reduce, but not map and filter. That was
originally to avoid a bug in the compiler :-) but it's easy to code and very
useful.

We could have a map(fun, range) in D, I guess. Gone the currying, but
welcome runtime functions.

Philippe

Reply via email to