소스 검색

Ajout abs + Correction bug

Arthur Brandao 6 년 전
부모
커밋
2192d6d282
1개의 변경된 파일9개의 추가작업 그리고 9개의 파일을 삭제
  1. 9 9
      src/migl/lisp/LispEval.java

+ 9 - 9
src/migl/lisp/LispEval.java

@@ -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) {