|
@@ -65,31 +65,83 @@ public class LispImpl implements Lisp {
|
|
|
return null;
|
|
|
});
|
|
|
operators.put(">", (lisp) -> {
|
|
|
- if(lisp.size() != 2) {
|
|
|
+ if(lisp.size() == 0) {
|
|
|
throw new LispError(LispError.ERR_NUM_ARG);
|
|
|
}
|
|
|
- boolean result = getElement(lisp.car()).toNumber() > getElement(lisp.cdr().car()).toNumber();
|
|
|
+ boolean result = true;
|
|
|
+ boolean first = true;
|
|
|
+ double value = 0;
|
|
|
+ while(!lisp.isEmpty()) {
|
|
|
+ if(first) {
|
|
|
+ value = getElement(lisp.car()).toNumber();
|
|
|
+ first = false;
|
|
|
+ } else {
|
|
|
+ double temp = getElement(lisp.car()).toNumber();
|
|
|
+ result = result && (value > temp);
|
|
|
+ value = temp;
|
|
|
+ }
|
|
|
+ lisp = lisp.cdr();
|
|
|
+ }
|
|
|
return LispElement.generate(result);
|
|
|
});
|
|
|
operators.put(">=", (lisp) -> {
|
|
|
- if(lisp.size() != 2) {
|
|
|
+ if(lisp.size() == 0) {
|
|
|
throw new LispError(LispError.ERR_NUM_ARG);
|
|
|
}
|
|
|
- boolean result = getElement(lisp.car()).toNumber() >= getElement(lisp.cdr().car()).toNumber();
|
|
|
+ boolean result = true;
|
|
|
+ boolean first = true;
|
|
|
+ double value = 0;
|
|
|
+ while(!lisp.isEmpty()) {
|
|
|
+ if(first) {
|
|
|
+ value = getElement(lisp.car()).toNumber();
|
|
|
+ first = false;
|
|
|
+ } else {
|
|
|
+ double temp = getElement(lisp.car()).toNumber();
|
|
|
+ result = result && (value >= temp);
|
|
|
+ value = temp;
|
|
|
+ }
|
|
|
+ lisp = lisp.cdr();
|
|
|
+ }
|
|
|
return LispElement.generate(result);
|
|
|
});
|
|
|
operators.put("<", (lisp) -> {
|
|
|
- if(lisp.size() != 2) {
|
|
|
+ if(lisp.size() == 0) {
|
|
|
throw new LispError(LispError.ERR_NUM_ARG);
|
|
|
}
|
|
|
- boolean result = getElement(lisp.car()).toNumber() < getElement(lisp.cdr().car()).toNumber();
|
|
|
+ boolean result = true;
|
|
|
+ boolean first = true;
|
|
|
+ double value = 0;
|
|
|
+ while(!lisp.isEmpty()) {
|
|
|
+ if(first) {
|
|
|
+ value = getElement(lisp.car()).toNumber();
|
|
|
+ first = false;
|
|
|
+ } else {
|
|
|
+ double temp = getElement(lisp.car()).toNumber();
|
|
|
+ result = result && (value < temp);
|
|
|
+ value = temp;
|
|
|
+ }
|
|
|
+ lisp = lisp.cdr();
|
|
|
+ }
|
|
|
return LispElement.generate(result);
|
|
|
});
|
|
|
operators.put("<=", (lisp) -> {
|
|
|
- if(lisp.size() != 2) {
|
|
|
+ if(lisp.size() == 0) {
|
|
|
throw new LispError(LispError.ERR_NUM_ARG);
|
|
|
}
|
|
|
- boolean result = getElement(lisp.car()).toNumber() <= getElement(lisp.cdr().car()).toNumber();
|
|
|
+ boolean result = true;
|
|
|
+ boolean first = true;
|
|
|
+ double value = 0;
|
|
|
+ while(!lisp.isEmpty()) {
|
|
|
+ if(first) {
|
|
|
+ value = getElement(lisp.car()).toNumber();
|
|
|
+ first = false;
|
|
|
+ } else {
|
|
|
+ double temp = getElement(lisp.car()).toNumber();
|
|
|
+ result = result && (value <= temp);
|
|
|
+ value = temp;
|
|
|
+ }
|
|
|
+ lisp = lisp.cdr();
|
|
|
+ }
|
|
|
return LispElement.generate(result);
|
|
|
});
|
|
|
operators.put("=", (lisp) -> {
|