Kaynağa Gözat

Amélioration vitesse de traitement des expressions lambdas

Arthur Brandao 6 yıl önce
ebeveyn
işleme
b171027fae

+ 0 - 12
src/migl/lisp/LispImpl.java

@@ -1,10 +1,5 @@
 package migl.lisp;
 
-import java.math.BigInteger;
-
-import migl.util.ConsList;
-import migl.util.ConsListFactory;
-
 public class LispImpl implements Lisp {
 	
 	private final LispParser parser = new LispParser();
@@ -22,13 +17,6 @@ public class LispImpl implements Lisp {
 
 	@Override
 	public Object evaluate(Object lisp) throws LispError {
-		/* --- L'execution du test sur fibo de 0 20 prend + 300sec sur serveur pour eviter echec on le passe --- */
-		ConsList<Object> range = ConsListFactory.asList("range", new BigInteger("0"), new BigInteger("20"));
-		ConsList<Object> fib20 = ConsListFactory.asList("map", "fib", range);
-		if(fib20.equals(lisp)) {
-			return LispElement.generate(LispList.valueOf("(1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765)"));
-		}
-		/* ------ */
 		this.eval.setLisp(lisp);
 		return this.eval.evaluate();
 	}

+ 12 - 3
src/migl/lisp/operator/DefineOperator.java

@@ -133,10 +133,19 @@ public class DefineOperator implements LispOperator {
 		}
 		//Remplace les parametres
 		String lispExpr = lambda.toString();
+		//System.out.println(lisp);
 		while(!param.isEmpty()) {
-			lispExpr = lispExpr.replaceAll(" " + param.car() + " ", " " + lisp.car() + " ")
-					.replaceAll("\\(" + param.car() + " ", "\\(" + lisp.car() + " ")
-					.replaceAll(" " + param.car() + "\\)", " " + lisp.car() + "\\)");
+			try {
+				//Tentative d'evalutation des arguments
+				LispElement elt = eval.evaluateList((ConsList<Object>) lisp.car());
+				lispExpr = lispExpr.replaceAll(" " + param.car() + " ", " " + elt + " ")
+						.replaceAll("\\(" + param.car() + " ", "\\(" + elt + " ")
+						.replaceAll(" " + param.car() + "\\)", " " + elt + "\\)");
+			} catch (Exception ex) {
+				lispExpr = lispExpr.replaceAll(" " + param.car() + " ", " " + lisp.car() + " ")
+						.replaceAll("\\(" + param.car() + " ", "\\(" + lisp.car() + " ")
+						.replaceAll(" " + param.car() + "\\)", " " + lisp.car() + "\\)");
+			}
 			param = param.cdr();
 			lisp = lisp.cdr();
 		}