Div and mod, why not
This commit is contained in:
@@ -26,6 +26,8 @@ pub enum Prim {
|
||||
Add,
|
||||
Sub,
|
||||
Mul,
|
||||
Div,
|
||||
Mod,
|
||||
Eq,
|
||||
Cons,
|
||||
Car,
|
||||
@@ -136,6 +138,8 @@ impl Env {
|
||||
("+", Rc::new(Form::Prim(Prim::Add))),
|
||||
("-", Rc::new(Form::Prim(Prim::Sub))),
|
||||
("*", Rc::new(Form::Prim(Prim::Mul))),
|
||||
("/", Rc::new(Form::Prim(Prim::Div))),
|
||||
("%", Rc::new(Form::Prim(Prim::Mod))),
|
||||
("cons", Rc::new(Form::Prim(Prim::Cons))),
|
||||
("cdr", Rc::new(Form::Prim(Prim::Cdr))),
|
||||
("car", Rc::new(Form::Prim(Prim::Car))),
|
||||
@@ -250,6 +254,8 @@ pub fn tree_walker_eval(f: Rc<Form>, e: Rc<RefCell<Env>>) -> Result<Rc<Form>> {
|
||||
Prim::Add => Form::new_int(a.int()? + b.int()?),
|
||||
Prim::Sub => Form::new_int(a.int()? - b.int()?),
|
||||
Prim::Mul => Form::new_int(a.int()? * b.int()?),
|
||||
Prim::Div => Form::new_int(a.int()? / b.int()?),
|
||||
Prim::Mod => Form::new_int(a.int()? % b.int()?),
|
||||
Prim::Cons => Form::new_pair(a, b),
|
||||
Prim::Eq => Form::new_bool(a.my_eq(&b)),
|
||||
_ => unreachable!(),
|
||||
@@ -314,6 +320,8 @@ impl fmt::Display for Form {
|
||||
Prim::Add => write!(f, "+"),
|
||||
Prim::Sub => write!(f, "-"),
|
||||
Prim::Mul => write!(f, "*"),
|
||||
Prim::Div => write!(f, "/"),
|
||||
Prim::Mod => write!(f, "%"),
|
||||
Prim::Cons => write!(f, "cons"),
|
||||
Prim::Car => write!(f, "car"),
|
||||
Prim::Cdr => write!(f, "cdr"),
|
||||
|
||||
Reference in New Issue
Block a user