pub enum Answer<N: Num> {
Single(N),
Multiple(Vec<N>),
}
Expand description
An answer of an evaluatation. Can be either a single answer or multiple. This struct contains some
helper methods for performing operations on single or multiple answers. The op
method takes another
Num
, and a function with two Num
arguments, itself and the other (as references). It performs
that function on all combinations and returns an answer with all of the results in one. The unop
function is similar but it performs an operation on only itself, without another value (unary
operation).
Variants§
Implementations§
Source§impl<N: Num> Answer<N>
impl<N: Num> Answer<N>
Sourcepub fn op<F: Fn(&N, &N) -> Calculation<N>>(
&self,
other: &Self,
oper: F,
) -> Calculation<N>
pub fn op<F: Fn(&N, &N) -> Calculation<N>>( &self, other: &Self, oper: F, ) -> Calculation<N>
Perform an operation on all the values of an answer with all the values of another answer
Examples found in repository?
examples/context.rs (line 29)
8fn main() {
9 // A context holds data that can be used in an expression
10 let mut context: Context<f64> = Context::new();
11 // Add a variable "x" to the context with the value 5.4
12 context.set_var("x", 5.4);
13 // Add a function "sum" to the context that returns the sum of it's arguments. A closure is passed
14 // in that takes twp arguments: args: &[Term], which is a slice if the arguments passed into the
15 // function, and ctx: &Context, which is a reference to the context which the expression is being
16 // evaluated with. The item passed in can be anything that implements the `Func` trait. There exists
17 // a blanket impl for Fn(&[Term], &Context) -> Calculation which allows you to pass in closures in
18 // that format.
19 context.set_func(
20 "sum",
21 |args: &[Term<f64>], ctx: &Context<f64>| -> Calculation<f64> {
22 if args.len() < 1 {
23 return Err(MathError::IncorrectArguments);
24 };
25
26 let mut sum = Answer::Single(0.0);
27 for arg in args {
28 let b = arg.eval_ctx(ctx)?;
29 sum = sum.op(&b, |a, b| Num::add(a, b, ctx))?;
30 }
31
32 Ok(sum)
33 },
34 );
35
36 let raw = "2 * sum(x, 7, 400)";
37 // The expression needs to be parsed with the context in order do decide if some names are functions
38 // or variables.
39 let expr = Expression::parse_ctx(raw, context).unwrap();
40 // The expression also needs to be evaluated with a context. This context can be different than the
41 // one it was parsed with, but if it is missing something that is necessary for evaluation the
42 // evaluation will fail.
43 println!("{} = {}", raw, expr.eval().unwrap())
44}
Sourcepub fn unop<F: Fn(&N) -> Calculation<N>>(&self, oper: F) -> Calculation<N>
pub fn unop<F: Fn(&N) -> Calculation<N>>(&self, oper: F) -> Calculation<N>
Perform an operation on all the values of an answer
Sourcepub fn unwrap_single(self) -> N
pub fn unwrap_single(self) -> N
Unwrap the single variant of an answer
Trait Implementations§
impl<N: Num> StructuralPartialEq for Answer<N>
Auto Trait Implementations§
impl<N> Freeze for Answer<N>where
N: Freeze,
impl<N> RefUnwindSafe for Answer<N>where
N: RefUnwindSafe,
impl<N> Send for Answer<N>where
N: Send,
impl<N> Sync for Answer<N>where
N: Sync,
impl<N> Unpin for Answer<N>where
N: Unpin,
impl<N> UnwindSafe for Answer<N>where
N: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CheckedAs for T
impl<T> CheckedAs for T
Source§fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
Casts the value.
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> OverflowingAs for T
impl<T> OverflowingAs for T
Source§fn overflowing_as<Dst>(self) -> (Dst, bool)where
T: OverflowingCast<Dst>,
fn overflowing_as<Dst>(self) -> (Dst, bool)where
T: OverflowingCast<Dst>,
Casts the value.
Source§impl<T> SaturatingAs for T
impl<T> SaturatingAs for T
Source§fn saturating_as<Dst>(self) -> Dstwhere
T: SaturatingCast<Dst>,
fn saturating_as<Dst>(self) -> Dstwhere
T: SaturatingCast<Dst>,
Casts the value.
Source§impl<T> UnwrappedAs for T
impl<T> UnwrappedAs for T
Source§fn unwrapped_as<Dst>(self) -> Dstwhere
T: UnwrappedCast<Dst>,
fn unwrapped_as<Dst>(self) -> Dstwhere
T: UnwrappedCast<Dst>,
Casts the value.
Source§impl<T> WrappingAs for T
impl<T> WrappingAs for T
Source§fn wrapping_as<Dst>(self) -> Dstwhere
T: WrappingCast<Dst>,
fn wrapping_as<Dst>(self) -> Dstwhere
T: WrappingCast<Dst>,
Casts the value.