pub enum Expression {
Number(Number),
Variable(String),
Constant(MathConstant),
BinaryOp {
op: BinaryOperator,
left: Box<Expression>,
right: Box<Expression>,
},
UnaryOp {
op: UnaryOperator,
operand: Box<Expression>,
},
Function {
name: String,
args: Vec<Expression>,
},
Matrix(Vec<Vec<Expression>>),
Vector(Vec<Expression>),
Set(Vec<Expression>),
Interval {
start: Box<Expression>,
end: Box<Expression>,
start_inclusive: bool,
end_inclusive: bool,
},
}
Expand description
数学表达式的核心数据结构
Variants§
Number(Number)
数值常量
Variable(String)
变量
Constant(MathConstant)
数学常量
BinaryOp
二元运算
UnaryOp
一元运算
Function
函数调用
Matrix(Vec<Vec<Expression>>)
矩阵表达式
Vector(Vec<Expression>)
向量表达式
Set(Vec<Expression>)
集合表达式
Interval
区间表达式
Implementations§
Source§impl Expression
impl Expression
Sourcepub fn constant(c: MathConstant) -> Self
pub fn constant(c: MathConstant) -> Self
创建常量表达式
Sourcepub fn binary_op(
op: BinaryOperator,
left: Expression,
right: Expression,
) -> Self
pub fn binary_op( op: BinaryOperator, left: Expression, right: Expression, ) -> Self
创建二元运算表达式
Sourcepub fn unary_op(op: UnaryOperator, operand: Expression) -> Self
pub fn unary_op(op: UnaryOperator, operand: Expression) -> Self
创建一元运算表达式
Sourcepub fn set(elements: Vec<Expression>) -> Self
pub fn set(elements: Vec<Expression>) -> Self
创建集合表达式
Sourcepub fn interval(
start: Expression,
end: Expression,
start_inclusive: bool,
end_inclusive: bool,
) -> Self
pub fn interval( start: Expression, end: Expression, start_inclusive: bool, end_inclusive: bool, ) -> Self
创建区间表达式
Sourcepub fn add(left: Expression, right: Expression) -> Self
pub fn add(left: Expression, right: Expression) -> Self
创建加法表达式
Sourcepub fn subtract(left: Expression, right: Expression) -> Self
pub fn subtract(left: Expression, right: Expression) -> Self
创建减法表达式
Sourcepub fn multiply(left: Expression, right: Expression) -> Self
pub fn multiply(left: Expression, right: Expression) -> Self
创建乘法表达式
Sourcepub fn divide(left: Expression, right: Expression) -> Self
pub fn divide(left: Expression, right: Expression) -> Self
创建除法表达式
Sourcepub fn power(base: Expression, exponent: Expression) -> Self
pub fn power(base: Expression, exponent: Expression) -> Self
创建幂运算表达式
Sourcepub fn negate(operand: Expression) -> Self
pub fn negate(operand: Expression) -> Self
创建负号表达式
Sourcepub fn sqrt(operand: Expression) -> Self
pub fn sqrt(operand: Expression) -> Self
创建平方根表达式
Sourcepub fn abs(operand: Expression) -> Self
pub fn abs(operand: Expression) -> Self
创建绝对值表达式
Sourcepub fn sin(operand: Expression) -> Self
pub fn sin(operand: Expression) -> Self
创建正弦函数表达式
Sourcepub fn cos(operand: Expression) -> Self
pub fn cos(operand: Expression) -> Self
创建余弦函数表达式
Sourcepub fn tan(operand: Expression) -> Self
pub fn tan(operand: Expression) -> Self
创建正切函数表达式
Sourcepub fn ln(operand: Expression) -> Self
pub fn ln(operand: Expression) -> Self
创建自然对数表达式
Sourcepub fn exp(operand: Expression) -> Self
pub fn exp(operand: Expression) -> Self
创建指数函数表达式
Sourcepub fn is_constant(&self) -> bool
pub fn is_constant(&self) -> bool
检查表达式是否为常量
Sourcepub fn get_variables(&self) -> Vec<String>
pub fn get_variables(&self) -> Vec<String>
获取表达式中的所有变量
Sourcepub fn infer_type(&self) -> ExprType
pub fn infer_type(&self) -> ExprType
推断表达式的类型
Sourcepub fn complexity(&self) -> usize
pub fn complexity(&self) -> usize
获取表达式的复杂度(用于性能优化)
Sourcepub fn substitute(&self, variables: &HashMap<String, Expression>) -> Expression
pub fn substitute(&self, variables: &HashMap<String, Expression>) -> Expression
使用变量值替换表达式中的变量
Sourcepub fn substitute_numbers(
&self,
variables: &HashMap<String, Number>,
) -> Expression
pub fn substitute_numbers( &self, variables: &HashMap<String, Number>, ) -> Expression
使用数值替换表达式中的变量
Sourcepub fn evaluate(
&self,
variables: &HashMap<String, Number>,
) -> Result<Number, String>
pub fn evaluate( &self, variables: &HashMap<String, Number>, ) -> Result<Number, String>
求值表达式,返回数值结果
Sourcepub fn evaluate_exact(&self) -> Result<Number, String>
pub fn evaluate_exact(&self) -> Result<Number, String>
精确求值表达式(不包含变量)
Sourcepub fn try_to_number(&self) -> Option<Number>
pub fn try_to_number(&self) -> Option<Number>
尝试将表达式简化为数值(如果可能)
Sourcepub fn is_evaluable(&self) -> bool
pub fn is_evaluable(&self) -> bool
检查表达式是否可以求值为数值
Trait Implementations§
Source§impl Clone for Expression
impl Clone for Expression
Source§fn clone(&self) -> Expression
fn clone(&self) -> Expression
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreSource§impl Debug for Expression
impl Debug for Expression
Source§impl<'de> Deserialize<'de> for Expression
impl<'de> Deserialize<'de> for Expression
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Source§impl Display for Expression
impl Display for Expression
Source§impl Hash for Expression
impl Hash for Expression
Source§impl PartialEq for Expression
impl PartialEq for Expression
Source§impl Serialize for Expression
impl Serialize for Expression
impl Eq for Expression
impl StructuralPartialEq for Expression
Auto Trait Implementations§
impl Freeze for Expression
impl RefUnwindSafe for Expression
impl Send for Expression
impl Sync for Expression
impl Unpin for Expression
impl UnwindSafe for Expression
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to
key
and return true
if they are equal.Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more