Browse Source

Amelioration < > <= >=

Arthur Brandao 6 years ago
parent
commit
9357186b19
1 changed files with 60 additions and 8 deletions
  1. 60 8
      src/migl/lisp/LispImpl.java

+ 60 - 8
src/migl/lisp/LispImpl.java

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