extern crate mexprp;
use mexprp::{Answer, Calculation, Context, Expression, MathError, Num, Term};
fn main() {
let mut context: Context<f64> = Context::new();
context.set_var("x", 5.4);
context.set_func(
"sum",
|args: &[Term<f64>], ctx: &Context<f64>| -> Calculation<f64> {
if args.len() < 1 {
return Err(MathError::IncorrectArguments);
};
let mut sum = Answer::Single(0.0);
for arg in args {
let b = arg.eval_ctx(ctx)?;
sum = sum.op(&b, |a, b| Num::add(a, b, ctx))?;
}
Ok(sum)
},
);
let raw = "2 * sum(x, 7, 400)";
let expr = Expression::parse_ctx(raw, context).unwrap();
println!("{} = {}", raw, expr.eval().unwrap())
}