|
@@ -13,24 +13,34 @@ public class DefineOperator implements LispOperator {
|
|
|
|
|
|
private static Map<String, ConsList<Object>> define = new HashMap<>();
|
|
|
|
|
|
+ /**
|
|
|
+ * Vide la liste des variable et expression lambda definit
|
|
|
+ */
|
|
|
+ public static void clear() {
|
|
|
+ define.clear();
|
|
|
+ }
|
|
|
+
|
|
|
@SuppressWarnings("unchecked")
|
|
|
- public static LispElement eval(Object elt) {
|
|
|
+ public static LispElement eval(Object elt) throws LispError {
|
|
|
if(elt instanceof ConsList) {
|
|
|
return eval((ConsList<Object>) elt);
|
|
|
}
|
|
|
- LispElement le = LispElement.generate(elt);
|
|
|
+ //Recup la valeur de l'element
|
|
|
+ LispElement lelt = LispElement.generate(elt);
|
|
|
+ String key;
|
|
|
try {
|
|
|
- ConsList<Object> cl = define.get(le.toStr());
|
|
|
- if(cl != null) {
|
|
|
- LispElement lelt = LispElement.generate(cl.car());
|
|
|
- if(!lelt.toString().contains("lambda")) {
|
|
|
- return lelt;
|
|
|
- }
|
|
|
- }
|
|
|
+ key = lelt.toStr();
|
|
|
} catch(IllegalStateException ex) {
|
|
|
- //Rien
|
|
|
+ throw new LispError(lelt.toString() + LispError.ERR_UNKNOW);
|
|
|
+ }
|
|
|
+ //Recup la valeur dans la map
|
|
|
+ ConsList<Object> cl = define.get(key);
|
|
|
+ if(cl == null) {
|
|
|
+ //Si aucune valeur alors erreur
|
|
|
+ throw new LispError(key + LispError.ERR_UNKNOW);
|
|
|
}
|
|
|
- return le;
|
|
|
+ //ToDo verifier si ce n'est pas une lambda expression
|
|
|
+ return LispElement.generate(cl.car());
|
|
|
}
|
|
|
|
|
|
public static LispElement eval(ConsList<Object> lisp) {
|