beginning model for noodle programming language
#[derive(Debug)]
enum Noodle {
Int(i32),
Plus(Box<Noodle>, Box<Noodle>),
Sub(Box<Noodle>, Box<Noodle>),
Mul(Box<Noodle>, Box<Noodle>),
Div(Box<Noodle>, Box<Noodle>),
Rem(Box<Noodle>, Box<Noodle>),
Name(String),
Func(Box<Noodle>, Box<Noodle>)
}
impl Noodle {
fn call(self) -> Noodle {
match self {
Noodle::Int(num) => Noodle::Int(num),
Noodle::Plus(l, r) => Noodle::Int(l.call().int() + r.call().int()),
Noodle::Sub(l, r) => Noodle::Int(l.call().int() - r.call().int()),
Noodle::Mul(l, r) => Noodle::Int(l.call().int() * r.call().int()),
Noodle::Div(l, r) => Noodle::Int(l.call().int() / r.call().int()),
Noodle::Rem(l, r) => Noodle::Int(l.call().int() % r.call().int()),
}
}
fn int(self) -> i32 {
match self {
Noodle::Int(num) => num,
_ => self.call().int()
}
}
}
fn main() {
// (8 - 6) * 6 = 12
}