- 
                Notifications
    You must be signed in to change notification settings 
- Fork 0
memoize
        Subhajit Sahu edited this page Jul 29, 2022 
        ·
        3 revisions
      
    Generate result-cached version of a function.
function memoize(x, fr, cache)
// x:     a function
// fr:    resolver ((...args) => unique key) [IDENTITY]
// cache: result cache [Map()]const xfunction = require('extra-function');
var calls = 0;
function factorialRec(n: number) {
  if (n<=1) return 1;
  return n * factorialRec(n-1);
}
function factorial(n: number) {
  ++calls;
  return factorialRec(n);
}
var fn = xfunction.memoize(factorial);
fn(3);
// → 6
fn(4);
// → 24
fn(5);
// → 120
fn(3);
// → 6
fn(4);
// → 24
fn(5);
// → 120
calls;
// → 3
var calls = 0;
function hypot(x: number, y: number) {
  ++calls;
  return Math.hypot(x, y);
}
function resolver(x: number, y: number) {
  return 4093*y + x;  // a hash
}
var fn = xfunction.memoize(hypot, resolver);
fn(3,  4);
// → 5
fn(6,  8);
// → 10
fn(5, 12);
// → 13
fn(3,  4);
// → 5
fn(6,  8);
// → 10
fn(5, 12);
// → 13
calls;
// → 3