50 lines
954 B
JavaScript
50 lines
954 B
JavaScript
(function () {
|
|
'use strict';
|
|
|
|
|
|
// iterativeComposed :: [f] -> f
|
|
function iterativeComposed(fs) {
|
|
|
|
return function (x) {
|
|
var i = fs.length,
|
|
e = x;
|
|
|
|
while (i--) e = fs[i](e);
|
|
return e;
|
|
}
|
|
}
|
|
|
|
// foldComposed :: [f] -> f
|
|
function foldComposed(fs) {
|
|
|
|
return function (x) {
|
|
return fs
|
|
.reduceRight(function (a, f) {
|
|
return f(a);
|
|
}, x);
|
|
};
|
|
}
|
|
|
|
|
|
var sqrt = Math.sqrt,
|
|
|
|
succ = function (x) {
|
|
return x + 1;
|
|
},
|
|
|
|
half = function (x) {
|
|
return x / 2;
|
|
};
|
|
|
|
|
|
// Testing two different multiple composition ([f] -> f) functions
|
|
|
|
return [iterativeComposed, foldComposed]
|
|
.map(function (compose) {
|
|
|
|
// both functions compose from right to left
|
|
return compose([half, succ, sqrt])(5);
|
|
|
|
});
|
|
})();
|