|
@@ -110,17 +110,17 @@ public class LispEval {
|
|
|
switch(lisp.size()) {
|
|
|
case 1:
|
|
|
LispElement elt = LispElement.getElement(lisp.car());
|
|
|
- if(elt.isNumber()) {
|
|
|
- return LispElement.generate(elt.toNumber() * -1); //Pb pitest qui remplace * par / or *-1 == /-1
|
|
|
+ if(elt.isInt()) {
|
|
|
+ return LispElement.generate(elt.toInt().multiply(new BigInteger("-1")));
|
|
|
}
|
|
|
- return LispElement.generate(elt.toInt().multiply(new BigInteger("-1")));
|
|
|
+ return LispElement.generate(elt.toNumber() * -1); //Pb pitest qui remplace * par / or *-1 == /-1
|
|
|
case 2:
|
|
|
LispElement elt1 = LispElement.getElement(lisp.car());
|
|
|
LispElement elt2 = LispElement.getElement(lisp.cdr().car());
|
|
|
- if(elt1.isNumber() || elt2.isNumber()) {
|
|
|
- return LispElement.generate(elt1.toNumber() - elt2.toNumber());
|
|
|
+ if(elt1.isInt() && elt2.isInt()) {
|
|
|
+ return LispElement.generate(elt1.toInt().subtract(elt2.toInt()));
|
|
|
}
|
|
|
- return LispElement.generate(elt1.toInt().subtract(elt2.toInt()));
|
|
|
+ return LispElement.generate(elt1.toNumber() - elt2.toNumber());
|
|
|
default:
|
|
|
throw new LispError(LispError.ERR_NUM_ARG);
|
|
|
}
|
|
@@ -134,10 +134,10 @@ public class LispEval {
|
|
|
if(elt2.toNumber() == 0) {
|
|
|
throw new LispError("Division by zero");
|
|
|
}
|
|
|
- if(elt1.isNumber() || elt2.isNumber()) {
|
|
|
- return LispElement.generate(elt1.toNumber() / elt2.toNumber());
|
|
|
+ if(elt1.isInt() && elt2.isInt()) {
|
|
|
+ return LispElement.generate(elt1.toInt().divide(elt2.toInt()));
|
|
|
}
|
|
|
- return LispElement.generate(elt1.toInt().divide(elt2.toInt()));
|
|
|
+ return LispElement.generate(elt1.toNumber() / elt2.toNumber());
|
|
|
});
|
|
|
operators.put("abs", (op, lisp) -> {
|
|
|
if(lisp.size() != 1) {
|