]> Repositorios git - scryer-prolog.git/commitdiff
implement (div)/2 properly (#435)
authorMark Thom <[email protected]>
Fri, 15 May 2020 04:25:39 +0000 (22:25 -0600)
committerMark Thom <[email protected]>
Fri, 15 May 2020 04:25:39 +0000 (22:25 -0600)
src/prolog/machine/arithmetic_ops.rs

index 210748894a31e787526c778e4a4a51b983c4ae3c..32cad18ab50454d1b1863e7b242b92d395ac49f7 100644 (file)
@@ -268,20 +268,10 @@ impl MachineState {
 
     pub(crate)
     fn int_floor_div(&self, n1: Number, n2: Number) -> Result<Number, MachineStub> {
-        match n1 / n2 {
-            Ok(result) => {
-                Ok(rnd_i(&result).to_owned())
-            }
-            Err(e) => {
-                let stub = MachineError::functor_stub(clause_name!("(div)"), 2);
-                Err(self.error_form(
-                    MachineError::evaluation_error(
-                        e
-                    ),
-                    stub
-                ))
-            }
-        }
+        let stub = MachineError::functor_stub(clause_name!("(div)"), 2);
+        let modulus = self.modulus(n1.clone(), n2.clone())?;
+
+        self.idiv(try_numeric_result!(self, n1 - modulus, stub)?, n2)
     }
 
     pub(crate)