private Expression define( List<Expression> args, String caller ) {
      
      // must have two arguemnts
      if ( args.size() == 2 ) {
         
         // first argument must be an id
         // second argument can be any expression
         if (  args.get(0).getType().compareTo("id") == 0 ) {
            
           
            // add our new deferred substitution
            // we checked to make sure it was an ID so casting shouldn't cause a problem
            defSubst.addID( (ID) args.get(0), args.get(1).eval(defSubst, caller) );
         }
      } else {
         System.err.println("define expected 2 arguments and got " + args.size() );
      }
      
      //return void
      return new Void();
   }