Functional programming
Fiddling based on http://objrefnotset.blogspot.fr/2013/03/currying-favor-with-partial-application.html
by tburette
JavaScript
"use strict";
function print(){document.write.apply(document, arguments)};
function curryLeft(func) {
var slice = Array.prototype.slice;
var args = slice.call(arguments, 1);
return function() {
return func.apply(this, args.concat(args, slice.call(arguments, 0)));
}
}
print(curryLeft(function(x, y){return x+y}, 1)(2));
function map(f, array){
var newArray = new Array(array.length);
return array.reduce(function(previous, current){
return previous.concat(f(current));
}, []);
}
//document.write(map(function(x){return x+1;}, [1, 2, 3]));
function foldLeft(func, initial, values){
return values.reduce(func, initial);
}
var x = foldLeft(function x(acc, newValue){return acc.concat(newValue*2)}, [], [1, 2, 3]);
//recursive process
function filter(func, array){
return array.length == 0 ? array :
(func(array[0])? array.slice(0, 1): []).concat(filter(func, array.slice(1)));
}
//iterative process
filter(function(x){return x < 3;}, [1, 2, 3]);
function selectx(arg){
return this;
}
var query = function query(array) {
var tables = [];
tables.push(array);
var _query = {
tables: tables,
select: selectx,
};
return _query;
};
x = query([{'a' : 1, 'b' : 2}]);
print(JSON.stringify(x.select('a')));