[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),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);
}