|
@@ -8,6 +8,7 @@ import java.util.Queue;
|
|
|
import java.util.regex.Matcher;
|
|
|
import java.util.regex.Pattern;
|
|
|
|
|
|
+import migl.lisp.operator.ComparatorOperator;
|
|
|
import migl.lisp.operator.ConsOperator;
|
|
|
import migl.util.ConsList;
|
|
|
import migl.util.ConsListFactory;
|
|
@@ -23,6 +24,11 @@ public class LispImpl implements Lisp {
|
|
|
static {
|
|
|
//Définition des opérateurs
|
|
|
operators.put("cons", new ConsOperator());
|
|
|
+ operators.put(">", new ComparatorOperator());
|
|
|
+ operators.put(">=", new ComparatorOperator());
|
|
|
+ operators.put("<", new ComparatorOperator());
|
|
|
+ operators.put("<=", new ComparatorOperator());
|
|
|
+ operators.put("=", new ComparatorOperator());
|
|
|
operators.put("quote", (op, lisp) -> {
|
|
|
if(lisp.size() != 1) {
|
|
|
throw new LispError(LispError.ERR_NUM_ARG);
|
|
@@ -62,104 +68,6 @@ public class LispImpl implements Lisp {
|
|
|
}
|
|
|
return LispElement.generate(result);
|
|
|
});
|
|
|
- operators.put(">", (op, lisp) -> {
|
|
|
- if(lisp.size() == 0) {
|
|
|
- throw new LispError(LispError.ERR_NUM_ARG);
|
|
|
- }
|
|
|
- boolean result = true;
|
|
|
- boolean first = true;
|
|
|
- double value = 0;
|
|
|
- while(!lisp.isEmpty()) {
|
|
|
- if(first) {
|
|
|
- value = LispElement.getElement(lisp.car()).toNumber();
|
|
|
- first = false;
|
|
|
- } else {
|
|
|
- double temp = LispElement.getElement(lisp.car()).toNumber();
|
|
|
- result = result && (value > temp);
|
|
|
- value = temp;
|
|
|
- }
|
|
|
- lisp = lisp.cdr();
|
|
|
- }
|
|
|
- return LispElement.generate(result);
|
|
|
- });
|
|
|
- operators.put(">=", (op, lisp) -> {
|
|
|
- if(lisp.size() == 0) {
|
|
|
- throw new LispError(LispError.ERR_NUM_ARG);
|
|
|
- }
|
|
|
- boolean result = true;
|
|
|
- boolean first = true;
|
|
|
- double value = 0;
|
|
|
- while(!lisp.isEmpty()) {
|
|
|
- if(first) {
|
|
|
- value = LispElement.getElement(lisp.car()).toNumber();
|
|
|
- first = false;
|
|
|
- } else {
|
|
|
- double temp = LispElement.getElement(lisp.car()).toNumber();
|
|
|
- result = result && (value >= temp);
|
|
|
- value = temp;
|
|
|
- }
|
|
|
- lisp = lisp.cdr();
|
|
|
- }
|
|
|
- return LispElement.generate(result);
|
|
|
- });
|
|
|
- operators.put("<", (op, lisp) -> {
|
|
|
- if(lisp.size() == 0) {
|
|
|
- throw new LispError(LispError.ERR_NUM_ARG);
|
|
|
- }
|
|
|
- boolean result = true;
|
|
|
- boolean first = true;
|
|
|
- double value = 0;
|
|
|
- while(!lisp.isEmpty()) {
|
|
|
- if(first) {
|
|
|
- value = LispElement.getElement(lisp.car()).toNumber();
|
|
|
- first = false;
|
|
|
- } else {
|
|
|
- double temp = LispElement.getElement(lisp.car()).toNumber();
|
|
|
- result = result && (value < temp);
|
|
|
- value = temp;
|
|
|
- }
|
|
|
- lisp = lisp.cdr();
|
|
|
- }
|
|
|
- return LispElement.generate(result);
|
|
|
- });
|
|
|
- operators.put("<=", (op, lisp) -> {
|
|
|
- if(lisp.size() == 0) {
|
|
|
- throw new LispError(LispError.ERR_NUM_ARG);
|
|
|
- }
|
|
|
- boolean result = true;
|
|
|
- boolean first = true;
|
|
|
- double value = 0;
|
|
|
- while(!lisp.isEmpty()) {
|
|
|
- if(first) {
|
|
|
- value = LispElement.getElement(lisp.car()).toNumber();
|
|
|
- first = false;
|
|
|
- } else {
|
|
|
- double temp = LispElement.getElement(lisp.car()).toNumber();
|
|
|
- result = result && (value <= temp);
|
|
|
- value = temp;
|
|
|
- }
|
|
|
- lisp = lisp.cdr();
|
|
|
- }
|
|
|
- return LispElement.generate(result);
|
|
|
- });
|
|
|
- operators.put("=", (op, lisp) -> {
|
|
|
- if(lisp.size() == 0) {
|
|
|
- throw new LispError(LispError.ERR_NUM_ARG);
|
|
|
- }
|
|
|
- boolean result = true;
|
|
|
- boolean first = true;
|
|
|
- double value = 0;
|
|
|
- while(!lisp.isEmpty()) {
|
|
|
- if(first) {
|
|
|
- value = LispElement.getElement(lisp.car()).toNumber();
|
|
|
- first = false;
|
|
|
- } else {
|
|
|
- result = result && (value == LispElement.getElement(lisp.car()).toNumber());
|
|
|
- }
|
|
|
- lisp = lisp.cdr();
|
|
|
- }
|
|
|
- return LispElement.generate(result);
|
|
|
- });
|
|
|
operators.put("+", (op, lisp) -> {
|
|
|
BigInteger resultInt = new BigInteger("0");
|
|
|
while(!lisp.isEmpty()){
|