[package] [Java implementation] [Execution output]


Derivative


import Expression;

derivative(funNameToDerivative, exp0, x) = {
    pd(exp) = {
     const(value) −> additive_identity,
        var(name) −> x == exp ? multiplicative_identity : additive_identity,
  app(funName, a) −>  pd(a) * funNameToDerivative(funName)(a), // chain rule
        sum(f, g) −>  pd(f) + pd(g),
           neg(f) −> -pd(f),
        sub(f, g) −>  pd(f) - pd(g),
        prd(f, g) −>  pd(f) * g + pd(g) * f,
        div(f, g) −> (pd(f) * g - pd(g) * f) / (g * g),
        pow(f, n) −>  pd(f) * const(n) * f ^ (n - multiplicative_identity)
    }.get(exp);
    pd(exp0);
}