From 77cf9aa7535a1d9481f0bd3caeea26e2b85c5019 Mon Sep 17 00:00:00 2001 From: Nathan Reiner Date: Wed, 17 Jan 2024 22:30:02 +0100 Subject: migrate from f64 to own complex --- src/expression.rs | 39 +++++++++++++++++---------------------- 1 file changed, 17 insertions(+), 22 deletions(-) (limited to 'src/expression.rs') diff --git a/src/expression.rs b/src/expression.rs index 5f2660b..4029f93 100644 --- a/src/expression.rs +++ b/src/expression.rs @@ -1,3 +1,4 @@ +use crate::complex::Complex; use crate::context::Context; use crate::function::FunctionArgument; use crate::string::{ContainsAndSkipBrackets, SplitMatchingBracket}; @@ -13,7 +14,7 @@ impl Expression { } } - pub fn evaluate(&self, context: &Context) -> Result { + pub fn evaluate(&self, context: &Context) -> Result { let (repr, oprepr) = { if self.repr.starts_with('(') { let (oprepr, r) = self.repr.split_on_matching_bracket(); @@ -44,30 +45,24 @@ impl Expression { let first_expr = Expression::from_string(first); let rest_expr = Expression::from_string(rest); Ok(op.evaluate(first_expr.evaluate(context)?, rest_expr.evaluate(context)?)) - } else { - if let Ok(r) = repr.parse::() { - Ok(r) - } else { - if let Some((func, args)) = repr.split_once('(') { - let mut argv = Vec::new(); + } else if let Ok(r) = repr.parse::() { + Ok(r) + } else if let Some((func, args)) = repr.split_once('(') { + let mut argv = Vec::new(); - for arg in args[..args.len() - 1].split(',') { - argv.push(Expression::from_string(arg).evaluate(context)?); - } + for arg in args[..args.len() - 1].split(',') { + argv.push(Expression::from_string(arg).evaluate(context)?); + } - if let Some(func) = context.function(func) { - Ok(func.eval(FunctionArgument::new(argv))) - } else { - Err(format!("function '{func}' not found")) - } - } else { - if let Some(res) = context.variable(&repr) { - Ok(*res) - } else { - Err(format!("variable '{repr}' not found")) - } - } + if let Some(func) = context.function(func) { + Ok(func.eval(FunctionArgument::new(argv))?) + } else { + Err(format!("function '{func}' not found")) } + } else if let Some(res) = context.variable(&repr) { + Ok(*res) + } else { + Err(format!("variable '{repr}' not found")) } } } -- cgit v1.2.3-70-g09d2