@Override
 public Value apply(Spreadsheet s, List<Expression> args) {
   Value a = args.get(0).evaluate(s).resolve(s);
   Value b = args.get(1).evaluate(s).resolve(s);
   switch (op) {
     case less:
       return a.compareTo(b) < 0 ? TrueValue.get() : null;
     case lesseq:
       return a.compareTo(b) <= 0 ? TrueValue.get() : null;
     case eq:
       return a.compareTo(b) == 0 ? TrueValue.get() : null;
     case grtr:
       return a.compareTo(b) > 0 ? TrueValue.get() : null;
     case grtreq:
       return a.compareTo(b) >= 0 ? TrueValue.get() : null;
     case noteq:
       return a.compareTo(b) != 0 ? TrueValue.get() : null;
     default:
       return null;
   }
 }
 @Override
 public Value apply(Spreadsheet s, List<Expression> args) {
   return args.get(0).evaluate(s).resolve(s) == null ? TrueValue.get() : null;
 }