private Expression times( List<Expression> args, String caller ) {
      
      boolean ints = true;
      boolean intsOrDecimals = true;
      
      if ( args.size() < 2 ) {
         System.err.println("* expected at least two arguments and got " + args.size() );
         return new Void();
      }
      
      for( int i = 0; i < args.size(); ++i ) {
         
         // if the numner is not an integer
         if ( args.get(i).eval(defSubst, caller).getType().compareTo("integer") != 0 ) {
            ints = false;
            
            // and is not a decimal
            if ( args.get(i).eval(defSubst, caller).getType().compareTo("decimal") != 0 ) {
               intsOrDecimals = false;
            } // end if
         } // end if 
      } // end for
      
      if ( ints ) {
         Long result = new Long(1);
         
         for ( int i = 0; i < args.size(); i++ ) {
            result = result * new Long( args.get(i).show(defSubst, caller) );
         }
         return new Value( result.toString() );
         
      } else if ( intsOrDecimals ) {
         Double result = new Double(1.0);
         
         for( int i = 0; i < args.size(); ++i ) {
            result = result * new Double( args.get(i).show(defSubst, caller) );
         }
         return new Value( result.toString() );
      } else {
         System.err.println("* expected only numbers as arguments");
         return new Void();
      }
   }