Expressions that are calculated once for each object
npm install cached-expressionExpressions that are calculated once for each object
``typescript
export declare class Calculator
public readonly calculate: (x: X) => Y
constructor (calculate: (x: X) => Y)
protected createCache (): MapLike
}
export default Calculator
`
#### Unique Object Reference
`javascript
import assert from 'assert'
import { Calculator } from 'cached-expression'
const { calculate } = new Calculator(x => [x, Math.random()])
const a0 = calculate('a')
const a1 = calculate('a')
const a2 = calculate('a')
const b0 = calculate('b')
// Same input produces same reference
assert(a0 === a1)
assert(a0 === a2)
// Different inputs produces different reference
assert(a0 !== b1)
`
#### Application: Factorial
Caching improve performance when calculating factorial of multiple numbers.
`javascript
import { Calculator } from 'cached-expression'
// Definition:
// fac(0) = 1
// fac(n) = n * fac(n - 1)
const fac = new Calculator(
x => x < 2
? 1
: x * fac(x - 1)
).calculate
const result = [0, 1, 2, 3, 4].map(fac)
`
#### Application: Fibonacci
Caching turn recursive fibonacci algorithm from a wasteful binary tree model to a efficient pyramid model.
`javascript
import { Calculator } from 'cached-expression'
// Definition:
// fib(0) = fib(1) = 1
// fib(n) = fib(n - 2) + fib(n - 1)
const fib = new Calculator(
x => x < 2
? 1
: fib(x - 2) + fib(x - 1)
).calculate
const result = fib(7)
``