|
@@ -78,7 +78,7 @@ public class LispImpl implements Lisp {
|
|
|
operators.put("+", (lisp) -> {
|
|
|
BigInteger resultInt = new BigInteger("0");
|
|
|
while(!lisp.isEmpty()){
|
|
|
- LispElement<?> eltInt = getElement(lisp.car());
|
|
|
+ LispElement eltInt = getElement(lisp.car());
|
|
|
if(eltInt.value.getClass() != BigInteger.class) break;
|
|
|
resultInt = resultInt.add(eltInt.toInt());
|
|
|
lisp = lisp.cdr();
|
|
@@ -88,7 +88,7 @@ public class LispImpl implements Lisp {
|
|
|
//Sinon on continue en passant en double
|
|
|
double result = resultInt.doubleValue();
|
|
|
while(!lisp.isEmpty()) {
|
|
|
- LispElement<?> elt = getElement(lisp.car());
|
|
|
+ LispElement elt = getElement(lisp.car());
|
|
|
result += elt.toNumber();
|
|
|
lisp = lisp.cdr();
|
|
|
}
|
|
@@ -97,7 +97,7 @@ public class LispImpl implements Lisp {
|
|
|
operators.put("*", (lisp) -> {
|
|
|
BigInteger resultInt = new BigInteger("1");
|
|
|
while(!lisp.isEmpty()){
|
|
|
- LispElement<?> eltInt = getElement(lisp.car());
|
|
|
+ LispElement eltInt = getElement(lisp.car());
|
|
|
if(eltInt.value.getClass() != BigInteger.class) break;
|
|
|
resultInt = resultInt.multiply(eltInt.toInt());
|
|
|
lisp = lisp.cdr();
|
|
@@ -107,7 +107,7 @@ public class LispImpl implements Lisp {
|
|
|
//Sinon on continue en passant en double
|
|
|
double result = resultInt.doubleValue();
|
|
|
while(!lisp.isEmpty()) {
|
|
|
- LispElement<?> elt = getElement(lisp.car());
|
|
|
+ LispElement elt = getElement(lisp.car());
|
|
|
result *= elt.toNumber();
|
|
|
lisp = lisp.cdr();
|
|
|
}
|
|
@@ -116,7 +116,7 @@ public class LispImpl implements Lisp {
|
|
|
operators.put("-", (lisp) -> {
|
|
|
switch(lisp.size()) {
|
|
|
case 1:
|
|
|
- LispElement<?> elt = getElement(lisp.car());
|
|
|
+ LispElement elt = 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();
|
|
@@ -124,8 +124,8 @@ public class LispImpl implements Lisp {
|
|
|
}
|
|
|
return LispElement.generate(elt.toInt().multiply(new BigInteger("-1")));
|
|
|
case 2:
|
|
|
- LispElement<?> elt1 = getElement(lisp.car());
|
|
|
- LispElement<?> elt2 = getElement(lisp.cdr().car());
|
|
|
+ LispElement elt1 = getElement(lisp.car());
|
|
|
+ LispElement elt2 = getElement(lisp.cdr().car());
|
|
|
if(elt1.value.getClass() == Double.class || elt2.value.getClass() == Double.class) {
|
|
|
return LispElement.generate(elt1.toNumber() - elt2.toNumber());
|
|
|
}
|
|
@@ -138,8 +138,8 @@ public class LispImpl implements Lisp {
|
|
|
if(lisp.size() != 2) {
|
|
|
throw new LispError("Incorrect number of argument");
|
|
|
}
|
|
|
- LispElement<?> elt1 = getElement(lisp.car());
|
|
|
- LispElement<?> elt2 = getElement(lisp.cdr().car());
|
|
|
+ LispElement elt1 = getElement(lisp.car());
|
|
|
+ LispElement elt2 = getElement(lisp.cdr().car());
|
|
|
if(elt1.value.getClass() == Double.class || elt2.value.getClass() == Double.class) {
|
|
|
return LispElement.generate(elt1.toNumber() / elt2.toNumber());
|
|
|
}
|
|
@@ -316,7 +316,7 @@ public class LispImpl implements Lisp {
|
|
|
* @return Valeur évaluer
|
|
|
* @throws LispError
|
|
|
*/
|
|
|
- private static LispElement<?> evaluateList(ConsList<Object> lisp) throws LispError {
|
|
|
+ private static LispElement evaluateList(ConsList<Object> lisp) throws LispError {
|
|
|
LispOperator op = operators.get(LispElement.generate(lisp.car()).toStr());
|
|
|
if(op == null) {
|
|
|
throw new LispError(new UnsupportedOperationException("Unknow expression"));
|
|
@@ -339,7 +339,7 @@ public class LispImpl implements Lisp {
|
|
|
* @throws LispError
|
|
|
*/
|
|
|
@SuppressWarnings("unchecked")
|
|
|
- private static LispElement<?> getElement(Object elt) throws LispError {
|
|
|
+ private static LispElement getElement(Object elt) throws LispError {
|
|
|
if(elt instanceof ConsList) {
|
|
|
return evaluateList((ConsList<Object>) elt);
|
|
|
}
|