|
@@ -110,16 +110,14 @@ public class LispEval {
|
|
|
switch(lisp.size()) {
|
|
|
case 1:
|
|
|
LispElement elt = LispElement.getElement(lisp.car());
|
|
|
- if(elt.value.getClass() == Double.class) {
|
|
|
- //return LispElement.generate(elt.toNumber() * -1); //Pb pitest qui remplace * par / or *-1 == /-1
|
|
|
- double value = elt.toNumber();
|
|
|
- return LispElement.generate(value - (value * 2));
|
|
|
+ if(elt.isNumber()) {
|
|
|
+ return LispElement.generate(elt.toNumber() * -1); //Pb pitest qui remplace * par / or *-1 == /-1
|
|
|
}
|
|
|
return LispElement.generate(elt.toInt().multiply(new BigInteger("-1")));
|
|
|
case 2:
|
|
|
LispElement elt1 = LispElement.getElement(lisp.car());
|
|
|
LispElement elt2 = LispElement.getElement(lisp.cdr().car());
|
|
|
- if(elt1.value.getClass() == Double.class || elt2.value.getClass() == Double.class) {
|
|
|
+ if(elt1.isNumber() || elt2.isNumber()) {
|
|
|
return LispElement.generate(elt1.toNumber() - elt2.toNumber());
|
|
|
}
|
|
|
return LispElement.generate(elt1.toInt().subtract(elt2.toInt()));
|
|
@@ -136,11 +134,21 @@ public class LispEval {
|
|
|
if(elt2.toNumber() == 0) {
|
|
|
throw new LispError("Division by zero");
|
|
|
}
|
|
|
- if(elt1.value.getClass() == Double.class || elt2.value.getClass() == Double.class) {
|
|
|
+ if(elt1.isNumber() || elt2.isNumber()) {
|
|
|
return LispElement.generate(elt1.toNumber() / elt2.toNumber());
|
|
|
}
|
|
|
return LispElement.generate(elt1.toInt().divide(elt2.toInt()));
|
|
|
});
|
|
|
+ operators.put("abs", (op, lisp) -> {
|
|
|
+ if(lisp.size() != 1) {
|
|
|
+ throw new LispError(LispError.ERR_NUM_ARG);
|
|
|
+ }
|
|
|
+ LispElement le = LispElement.getElement(lisp.car());
|
|
|
+ if(le.isInt()) {
|
|
|
+ return LispElement.generate(le.toInt().abs());
|
|
|
+ }
|
|
|
+ return LispElement.generate(Math.abs(le.toNumber()));
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
private Object lispElt = null;
|