Memoize


declarativePure functionsInmutablecurryingfunctors
// A more functional memoizer
//We can beef up our module by adding functions later
var Memoizer = (function () {
//Private data
var cache = {};
//named functions are awesome!
function cacher(func) {
return function () {
var key = JSON.stringify(arguments);
if (cache[key]) {
return cache[key];
} else {
val = func.apply(this, arguments);
cache[key] = val;
return val;
}
};
}
//Public data
return {
memo: function (func) {
return cacher(func);
},
};
})();
var fib = Memoizer.memo(function (n) {
if (n < 2) {
return 1;
} else {
return fib(n - 2) + fib(n - 1);
}
});