use num_rational::Rational64;
#[derive(Debug, Clone, PartialEq)]
pub enum Expr {
Num(Rational64),
Var(String),
Add(Box<Expr>, Box<Expr>),
Sub(Box<Expr>, Box<Expr>),
Mul(Box<Expr>, Box<Expr>),
Div(Box<Expr>, Box<Expr>),
Neg(Box<Expr>),
}
impl Expr {
pub fn num(n: i64) -> Self {
Expr::Num(Rational64::from_integer(n))
}
pub fn frac(num: i64, den: i64) -> Self {
Expr::Num(Rational64::new(num, den))
}
pub fn var(name: &str) -> Self {
Expr::Var(name.to_string())
}
}