From 75d025bcb2481e987969a08a1fa6c5303f33ac7a Mon Sep 17 00:00:00 2001 From: Nathan Braswell Date: Sun, 19 Nov 2023 21:56:42 -0500 Subject: [PATCH] Div and mod, why not --- sl/src/lib.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/sl/src/lib.rs b/sl/src/lib.rs index 4b1d45b..a31b2ad 100644 --- a/sl/src/lib.rs +++ b/sl/src/lib.rs @@ -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
, e: Rc>) -> Result> { 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"),