-
Notifications
You must be signed in to change notification settings - Fork 0
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