pub struct Context { /* private fields */ }Expand description
表达式构造与求值的宿主。按问题作用域创建;Clone 得到共享同一 arena
的另一个入口(不复制数据)。
Implementations§
Source§impl Context
impl Context
pub fn new() -> Self
pub fn int(&self, v: i64) -> Expr
pub fn integer(&self, v: &Integer) -> Expr
Sourcepub fn sym_with(&self, name: &str, preds: &[Predicate]) -> Result<Expr, String>
pub fn sym_with(&self, name: &str, preds: &[Predicate]) -> Result<Expr, String>
带假设声明符号(D5):闭包补全(even⇒integer⇒…)+ 冲突检测; 同名重设不同假设报错(返回 Err 由调用方决定——MATLAB assume 的覆盖语义是有意不采用的,见 DESIGN D5)。
pub fn pow(&self, base: &Expr, exp: &Expr) -> Expr
Sourcepub fn cmp_expr(&self, a: &Expr, b: &Expr) -> Ordering
pub fn cmp_expr(&self, a: &Expr, b: &Expr) -> Ordering
表达式全序(同一 Context 内;跨 Context 用 Expr::eq 的结构比较)。
pub fn eq_expr(&self, a: &Expr, b: &Expr) -> bool
Sourcepub fn node_count(&self) -> usize
pub fn node_count(&self) -> usize
arena 规模(节点数;诊断与后续基准用)。
Sourcepub fn inspect<R>(&self, f: impl FnOnce(&Inspector<'_>) -> R) -> R
pub fn inspect<R>(&self, f: impl FnOnce(&Inspector<'_>) -> R) -> R
只读检视。持有 Inspector 期间不可构造新表达式(构造方独占借用 arena)。
Sourcepub fn expand(&self, e: &Expr) -> Expr
pub fn expand(&self, e: &Expr) -> Expr
展开(L1):分配乘积 over 和式、展开非负整数幂(带规模守卫)、 函数参数内部展开。每步经规范形构造器,输出为规范形。
Sourcepub fn cancel(&self, e: &Expr) -> Expr
pub fn cancel(&self, e: &Expr) -> Expr
有理函数约化(L1):分子分母的多项式公因子(gcd)约去。 非多项式因子原样保留;无可约化时返回与输入同一节点。
Sourcepub fn factor(&self, e: &Expr) -> Expr
pub fn factor(&self, e: &Expr) -> Expr
多项式因式分解(M4/M5):cont · Π 因子^重数,重建为规范形。
1/2 变元完全分解,≥3 变元部分(内容+平方自由);非多项式输入返回原节点。
Sourcepub fn diff(&self, e: &Expr, x: &Expr) -> Expr
pub fn diff(&self, e: &Expr, x: &Expr) -> Expr
符号求导(P1):和/积/链式/幂(整数、有理、一般指数)与初等 函数表(sin cos tan exp log sqrt,abs→sign)。输出规范形。
Sourcepub fn taylor(&self, e: &Expr, x: &Expr, at: i64, order: u32) -> Expr
pub fn taylor(&self, e: &Expr, x: &Expr, at: i64, order: u32) -> Expr
Taylor 级数(P1):x=a 处的多项式部分到 (x−a)^order(含)。
Sourcepub fn subst(&self, e: &Expr, map: &[(&str, Expr)]) -> Expr
pub fn subst(&self, e: &Expr, map: &[(&str, Expr)]) -> Expr
代换:按符号名替换子表达式(替换值须属同一 Context)。
重建经规范形构造器,subst(e, x→x) 与 e 同节点。
Sourcepub fn eval_rational(
&self,
e: &Expr,
vals: &[(&str, Rational)],
) -> Option<Rational>
pub fn eval_rational( &self, e: &Expr, vals: &[(&str, Rational)], ) -> Option<Rational>
ℚ 上精确求值。Float 字面量与函数节点返回 None(D2 域边界)。
Sourcepub fn eval_float(&self, e: &Expr, vals: &[(&str, f64)]) -> Option<f64>
pub fn eval_float(&self, e: &Expr, vals: &[(&str, f64)]) -> Option<f64>
f64 数值求值(差分测试的语义判据通道)。支持初等函数头。
Sourcepub fn monomial_coeffs(
&self,
e: &Expr,
vars: &[&str],
) -> Result<Vec<(Vec<u32>, Expr)>, CasError>
pub fn monomial_coeffs( &self, e: &Expr, vars: &[&str], ) -> Result<Vec<(Vec<u32>, Expr)>, CasError>
把 e 视作 vars 的多项式,返回 (指数向量, 系数) 列表,指数按 vars 顺序。
- 依赖
e已Context::expand(未展开也能跑,但同幂次可能分散多项)。 - 同指数的项会合并;系数保持符号形式(不数值化)。
vars之外的自由符号被视为系数的一部分。- 变量的非多项式用法返回
CasErrorKind::NonPolynomial,负指数返回CasErrorKind::NegativeExponent,变量名不存在返回CasErrorKind::UnknownSymbol。