Skip to content

memoize

Subhajit Sahu edited this page Aug 7, 2022 · 1 revision

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 xasyncfn = require('extra-async-function');


var calls = 0;

function factorialRec(n: number) {
  if (n<=1) return 1;
  return n * factorialRec(n-1);
}

async function factorial(n: number) {
  ++calls;
  return factorialRec(n);
}

var fn = xasyncfn.memoize(factorial);
await fn(3);
// → 6
await fn(4);
// → 24
await fn(5);
// → 120
await fn(3);
// → 6
await fn(4);
// → 24
await fn(5);
// → 120
calls;
// → 3


var calls = 0;

async function hypot(x: number, y: number) {
  ++calls;
  return Math.hypot(x, y);
}

async function resolver(x: number, y: number) {
  return 4093*y + x;  // a hash
}

var fn = xasyncfn.memoize(hypot, resolver);
await fn(3,  4);
// → 5
await fn(6,  8);
// → 10
await fn(5, 12);
// → 13
await fn(3,  4);
// → 5
await fn(6,  8);
// → 10
await fn(5, 12);
// → 13
calls;
// → 3


References

Clone this wiki locally