|
@@ -31,6 +31,7 @@ public class DefineOperator implements LispOperator {
|
|
|
* @return
|
|
|
* @throws LispError
|
|
|
*/
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
private LispElement define(LispEval eval, ConsList<Object> lisp) throws LispError {
|
|
|
if(lisp.size() != 2) {
|
|
|
throw new LispError(LispError.ERR_NUM_ARG);
|
|
@@ -45,6 +46,13 @@ public class DefineOperator implements LispOperator {
|
|
|
}
|
|
|
//Verification de sa validité
|
|
|
eval.verifyForbiddenName(key);
|
|
|
+ //Si c'est une lambda verification du nombre d'argument
|
|
|
+ if(lisp.cdr().car() instanceof ConsList) {
|
|
|
+ ConsList<Object> cl = (ConsList<Object>) lisp.cdr().car();
|
|
|
+ if(cl.size() != 3) {
|
|
|
+ throw new LispError(LispError.ERR_NUM_ARG);
|
|
|
+ }
|
|
|
+ }
|
|
|
//Ajoute dans la map
|
|
|
this.define.put(key, lisp.cdr());
|
|
|
//Evalue pour le retour
|