///|
using @symcore {type Expr}
///|
fn ordinary_application_name_args(expr : Expr) -> (String, Array[Expr])? {
match @symcore.application_parts(expr) {
Some((head, args)) =>
match head {
Expr::FunctionHead(name) | Expr::UndefinedFunction(name) =>
Some((name, args))
_ => None
}
None => None
}
}
///|
fn derivative_call_args(inner : Expr, deriv_args : Array[Expr]) -> Array[Expr] {
let out : Array[Expr] = [inner]
let pair_count = deriv_args.length() / 2
for i in 0.. out.push(wrt)
_ => out.push(Expr::Tuple([wrt, order]))
}
}
out
}