SymExpr

Enum SymExpr 

Source
pub enum SymExpr {
    Primary(Primary),
    Add(Vec<SymExpr>),
    Mul(Vec<SymExpr>),
    Exp(Box<SymExpr>, Box<SymExpr>),
}
Expand description

A mathematical expression with information about its terms and factors.

This type should be distinguished from the cas_parser::parser::ast::Expr type, which is produced by cas_parser. The main difference is that this type flattens out the tree structure. For example, the expression x + (y + z) would be represented internally as a single SymExpr::Add node with three children, x, y, and z.

For more information about this type, see the module-level documentation.

Variants§

§

Primary(Primary)

A single term or factor.

§

Add(Vec<SymExpr>)

Multiple terms added together.

§

Mul(Vec<SymExpr>)

Multiple factors multiplied together.

§

Exp(Box<SymExpr>, Box<SymExpr>)

An expression raised to a power.

Implementations§

Source§

impl SymExpr

Source

pub fn cmp_precedence(&self, other: &Self) -> Ordering

Returns true if the given expression has lower precedence than this expression.

This is used to determine if parentheses are needed around the given expression when printing.

Source

pub fn as_integer(&self) -> Option<&Integer>

If the expression is a Primary::Integer, returns a reference to the contained integer.

Source

pub fn into_integer(self) -> Option<Integer>

If the expression is a Primary::Integer, returns the contained integer.

Source

pub fn is_integer(&self) -> bool

Returns true if the expression is a Primary::Integer.

Source

pub fn is_integer_recip(&self) -> bool

Returns true if the expression is a Primary::Integer raised to the power of -1.

Source

pub fn as_integer_recip(&self) -> Option<&Integer>

If the expression is a Primary::Integer raised to the power of -1, returns a reference to the contained integer (the denominator of the fraction).

Source

pub fn into_integer_recip(self) -> Option<Integer>

If the expression is a Primary::Integer raised to the power of -1, returns the contained integer (the denominator of the fraction).

Source

pub fn is_float(&self) -> bool

Returns true if the expression is a Primary::Float.

Source

pub fn as_symbol(&self) -> Option<&str>

If the expression is a Primary::Symbol, returns a reference to the contained symbol.

Source

pub fn sqrt(self) -> Self

Returns the square root of this expression. No simplification is done.

Source

pub fn post_order_iter(&self) -> ExprIter<'_>

Returns an iterator that traverses the tree of expressions in left-to-right post-order (i.e. depth-first).

Trait Implementations§

Source§

impl Add for SymExpr

Adds two SymExprs together. No simplification is done, except for the case where the operands are a mix of Primary and / or SymExpr::Add, in which case both are combined in one list of terms (flattening).

Source§

type Output = SymExpr

The resulting type after applying the + operator.
Source§

fn add(self, rhs: Self) -> Self::Output

Performs the + operation. Read more
Source§

impl AddAssign for SymExpr

Adds two SymExprs together. The behavior is the same as Add, except we can reuse the allocated memory of self if possible.

Source§

fn add_assign(&mut self, rhs: Self)

Performs the += operation. Read more
Source§

impl Clone for SymExpr

Source§

fn clone(&self) -> SymExpr

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 Debug for SymExpr

Source§

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

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

impl Display for SymExpr

Source§

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

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

impl From<Expr> for SymExpr

Source§

fn from(expr: AstExpr) -> Self

Converts to this type from the input type.
Source§

impl From<SymExpr> for Expr

Source§

fn from(expr: SymExpr) -> Self

Converts to this type from the input type.
Source§

impl Hash for SymExpr

Hash is manually implemented for SymExpr to ensure consistent behavior with PartialEq.

We also manage to hash SymExpr::Add and SymExpr::Mul in O(n) time by using a commutative hashing function, unaffected by the order of the elements.

Source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl Mul for SymExpr

Multiplies two SymExprs together. No simplification is done, except for the case where the operands are a mix of Primary and / or SymExpr::Mul, in which case both are combined in one list of factors (flattening).

Source§

type Output = SymExpr

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: Self) -> Self

Performs the * operation. Read more
Source§

impl MulAssign for SymExpr

Source§

fn mul_assign(&mut self, rhs: Self)

Performs the *= operation. Read more
Source§

impl Neg for SymExpr

Multiplies this expression by -1. No simplification is done, except for the case where the expression is a numeric Primary, in which case the number is negated.

Source§

type Output = SymExpr

The resulting type after applying the - operator.
Source§

fn neg(self) -> Self::Output

Performs the unary - operation. Read more
Source§

impl PartialEq for SymExpr

Checks if two expressions are strictly equal.

Two expressions are strictly equal if:

For more information about strict equality, see the module-level documentation.

Source§

fn eq(&self, other: &Self) -> 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 Eq for SymExpr

Auto Trait Implementations§

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<Src, Dst> CastFrom<Src> for Dst
where Src: Cast<Dst>,

Source§

fn cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> CheckedAs for T

Source§

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

Casts the value.
Source§

impl<Src, Dst> CheckedCastFrom<Src> for Dst
where Src: CheckedCast<Dst>,

Source§

fn checked_cast_from(src: Src) -> Option<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> Fmt for T
where T: Display,

Source§

fn fg<C>(self, color: C) -> Foreground<Self>
where C: Into<Option<Color>>, Self: Display,

Give this value the specified foreground colour.
Source§

fn bg<C>(self, color: C) -> Background<Self>
where C: Into<Option<Color>>, Self: Display,

Give this value the specified background colour.
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<Src, Dst> OverflowingCastFrom<Src> for Dst
where Src: OverflowingCast<Dst>,

Source§

fn overflowing_cast_from(src: Src) -> (Dst, bool)

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<Src, Dst> SaturatingCastFrom<Src> for Dst
where Src: SaturatingCast<Dst>,

Source§

fn saturating_cast_from(src: Src) -> 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<Src, Dst> UnwrappedCastFrom<Src> for Dst
where Src: UnwrappedCast<Dst>,

Source§

fn unwrapped_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WrappingAs for T

Source§

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

Casts the value.
Source§

impl<Src, Dst> WrappingCastFrom<Src> for Dst
where Src: WrappingCast<Dst>,

Source§

fn wrapping_cast_from(src: Src) -> Dst

Casts the value.