Exemplo de MapReduce do Coursera Scala traduzido para JS

/* This function returns a function that has 
* two parameters. Called, it will call map(x)

* for each x smaller y and reduce these by the

* reduce function.

*

* The unit enables you to provide neutral opertaion

* elements to the function.

*/

function mapReduce(x, y, reduce, map, unit) {
return function result(x, y) {
if (x > y)
return unit;
else
return reduce( map(x), result((x + 1), y) );
};
}

function sum(x, y) {
return mapReduce(x, y,
// javascript has no way to access
// the '+' as a function
function plus(x, y) { return x + y; },
function identity(e) { return e; },
0)(x, y);
}

function sumCubes(x, y) {
return mapReduce(x, y,
function plus(x, y) { return x + y; },
function cube(x) { return x * x * x; },
0)(x, y);
}

function product(x, y) {
return mapReduce(x, y,
// same here, no way to access '*' directly
function plusCubes(x, y) { return x * y; },
function identity(e) { return e; },
1)(x, y);
}

function faculty(n){
return product(1, n);
}

console
.log(sum(0, 2));
console
.log(sumCubes(0, 5));

console
.log(product(1, 5));
console
.log(faculty(5));