Term

Enum Term 

Source
pub enum Term<N: Num> {
    Num(Answer<N>),
    Operation(Rc<dyn Operate<N>>),
    Function(String, Vec<Term<N>>),
    Var(String),
}
Expand description

The main representation of parsed equations. It is an operand that can contain an operation between more of itself. This form is the only one that can be directly evaluated. Does not include it’s own context.

Variants§

§

Num(Answer<N>)

A number

§

Operation(Rc<dyn Operate<N>>)

An operation

§

Function(String, Vec<Term<N>>)

A function with the given arguments

§

Var(String)

A variable

Implementations§

Source§

impl<N: Num + 'static> Term<N>

Source

pub fn parse(raw: &str) -> Result<Self, ParseError>

Parse a string into an expression

Source

pub fn parse_ctx(raw: &str, ctx: &Context<N>) -> Result<Self, ParseError>

Parse a string into an expression with the given context

Source

pub fn eval(&self) -> Calculation<N>

Evaluate the term with the default context

Source

pub fn eval_ctx(&self, ctx: &Context<N>) -> Calculation<N>

Evaluate the term with the given context

Examples found in repository?
examples/context.rs (line 28)
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 to_string(&self) -> String

Express this term as a string

Trait Implementations§

Source§

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

Source§

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

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

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

Performs copy-assignment from source. Read more
Source§

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

Source§

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

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

impl<N: Num + 'static> Display for Term<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: Num> From<Expression<N>> for Term<N>

Source§

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

Converts to this type from the input type.
Source§

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

Source§

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

Converts to this type from the input type.

Auto Trait Implementations§

§

impl<N> Freeze for Term<N>
where N: Freeze,

§

impl<N> !RefUnwindSafe for Term<N>

§

impl<N> !Send for Term<N>

§

impl<N> !Sync for Term<N>

§

impl<N> Unpin for Term<N>
where N: Unpin,

§

impl<N> !UnwindSafe for Term<N>

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.