immut API
Luna-Flow/luna-poly/immut 是不可变多项式层的门面包。它自身不定义任何内容:它重新导出共享的 core 词汇、Luna-Flow/luna-generic 的通用代数 trait 以及四种不可变表示,因此一次导入即可访问整个面向值的 API。
import {
"Luna-Flow/luna-poly/immut",
}
下列每个名字都是 pub using 别名:@immut.DensePolynomial 就是 @immut/dense.DensePolynomial,@immut.ExponentVector 就是 @core.ExponentVector。方法在定义该类型的包的页面中说明。
多项式类型
DensePolynomial
不可变稠密一元多项式。参见 immut/dense API。
pub using @dense {type DensePolynomial}
TermPolynomial
以有序项数组表示的不可变多元多项式。参见 immut/term API。
pub using @term {type TermPolynomial}
SparsePolynomial
以有序映射表示的不可变多元多项式。参见 immut/sparse API。
pub using @sparse {type SparsePolynomial}
ContextPolynomial, ContextSubstitutionValue
具名变量上下文上的不可变多项式,以及其代换的载荷。参见 immut/context API。
pub using @context {type ContextPolynomial}
pub using @context {type ContextSubstitutionValue}
别名重新导出的是类型,而不是作为独立值的构造器:在期望类型已知时写 Scalar(v) 和 Polynomial(p),否则写全称 @immut.ContextSubstitutionValue::Polynomial(p)。
来自 core 的共享词汇
ExponentVector, Variable, VariableContext, PolynomialShape
单项式、具名变量、变量上下文和形状元数据。参见 core API。
pub using @core {type ExponentVector}
pub using @core {type Variable}
pub using @core {type VariableContext}
pub using @core {type PolynomialShape}
UnivariateOps, MultivariateOps, ContextOps
用于字典传递式泛型代码的操作记录。参见 core API。
pub using @core {type UnivariateOps}
pub using @core {type MultivariateOps}
pub using @core {type ContextOps}
能力 trait
观察 trait 及其组合。参见 core API。
pub using @core {trait HasLength}
pub using @core {trait HasDegree}
pub using @core {trait IsZero}
pub using @core {trait HasTermCount}
pub using @core {trait HasArity}
pub using @core {trait HasTotalDegree}
pub using @core {trait HasContext}
pub using @core {trait HasShape}
pub using @core {trait Clearable}
pub using @core {trait Copyable}
pub using @core {trait UnivariatePolynomial}
pub using @core {trait MultivariatePolynomial}
pub using @core {trait ContextualPolynomial}
pub using @core {trait MutablePolynomial}
这里同样重新导出了 Clearable、Copyable 和 MutablePolynomial,以便两个门面包导出相同的 trait 集合,尽管没有任何不可变类型实现它们。
来自 luna-generic 的代数 trait
Zero, One, AddMonoid, MulMonoid, AddGroup, MulGroup, Semiring, Ring, Field, Num
Luna-Flow/luna-generic 的代数能力 trait,重新导出后,书写系数约束无需第二次导入。
pub using @luna-generic {trait Zero}
pub using @luna-generic {trait One}
pub using @luna-generic {trait AddMonoid}
pub using @luna-generic {trait MulMonoid}
pub using @luna-generic {trait AddGroup}
pub using @luna-generic {trait MulGroup}
pub using @luna-generic {trait Semiring}
pub using @luna-generic {trait Ring}
pub using @luna-generic {trait Field}
pub using @luna-generic {trait Num}
fn[A : @immut.Ring + Eq] cube_at(p : @immut.DensePolynomial[A], a : A) -> A {
p.pow(3).eval(a)
}
test "one import" {
let p = @immut.DensePolynomial::from_coefficients([1, 1])
inspect(cube_at(p, 1), content="8")
let v : @immut.ExponentVector = @immut.ExponentVector::from_array([1U])
let s = @immut.SparsePolynomial::from_terms([(v, 2)])
inspect(@immut.HasTermCount::term_count(s), content="1")
}