Enum Answer

Source
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§

§

Single(N)

A single answer

§

Multiple(Vec<N>)

Multiple answers. Will always be at least two (probably)

Implementations§

Source§

impl<N: Num> Answer<N>

Source

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}
Source

pub fn unop<F: Fn(&N) -> Calculation<N>>(&self, oper: F) -> Calculation<N>

Perform an operation on all the values of an answer

Source

pub fn unwrap_single(self) -> N

Unwrap the single variant of an answer

Source

pub fn to_vec(self) -> Vec<N>

Convert this answer into a vector

Source

pub fn join(self, other: Self) -> Self

Adds all the answers of another answer to the asnwers of this answer, returning a new answer

Trait Implementations§

Source§

impl<N: Clone + Num> Clone for Answer<N>

Source§

fn clone(&self) -> Answer<N>

Returns a duplicate of the value. Read more
1.0.0 · Source§

const fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<N: Debug + Num> Debug for Answer<N>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<N: Num> Display for Answer<N>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<N: Num> From<Answer<N>> for Term<N>

Source§

fn from(t: Answer<N>) -> Term<N>

Converts to this type from the input type.
Source§

impl<N: PartialEq + Num> PartialEq for Answer<N>

Source§

fn eq(&self, other: &Answer<N>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Az for T

Source§

fn az<Dst>(self) -> Dst
where T: Cast<Dst>,

Casts the value.
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CheckedAs for T

Source§

fn checked_as<Dst>(self) -> Option<Dst>
where T: CheckedCast<Dst>,

Casts the value.
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> OverflowingAs for T

Source§

fn overflowing_as<Dst>(self) -> (Dst, bool)
where T: OverflowingCast<Dst>,

Casts the value.
Source§

impl<T> SaturatingAs for T

Source§

fn saturating_as<Dst>(self) -> Dst
where T: SaturatingCast<Dst>,

Casts the value.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> UnwrappedAs for T

Source§

fn unwrapped_as<Dst>(self) -> Dst
where T: UnwrappedCast<Dst>,

Casts the value.
Source§

impl<T> WrappingAs for T

Source§

fn wrapping_as<Dst>(self) -> Dst
where T: WrappingCast<Dst>,

Casts the value.