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