JSFiddle - React, Tailwind, and code Playground
JavaScript
function rsum(x, n){
// shift is slow.
return x.length === 1 ? x[0] : ((n = x.shift()), n + rsum(x));
}
function isEmpty(xs) {
return xs.length === 0;
}
function sumHaskellLike(x) {
for (var _len = arguments.length, xs = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
xs[_key - 1] = arguments[_key];
}
return isEmpty(xs) ? x : x + sumHaskellLike.apply(undefined, xs);
}
var iterations = 4000,
results = Array(iterations);
console.time('rsum');
while(iterations--){
results[iterations] = rsum([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]);
}
console.timeEnd('rsum');
results.sort();
var iterations = 4000,
results = Array(iterations);
console.time('hsum');
while(iterations--){
results[iterations] = sumHaskellLike(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);
}
console.timeEnd('hsum');
results.sort();
console.log(rsum2([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]));