code: public Expr and(Expr expr) {
          if (type == Type.TRUE) {
              set(expr);
          } else if (expr.type != Type.TRUE) {
              if (type.isLogical() && !expr.type.isLogical()) {
                  if (type == AND)
                      right.and(expr);
                  else if (type != NOT)
                      setLogical(Type.AND, expr, new Expr(this));
                  else
                      setLogical(Type.AND, expr, new Expr(this));
              } else {
                  setLogical(Type.AND, new Expr(this), expr);
              }
          }
          return this;
      }
docs: Utility, combine this expression with another, using conjunction.
  The expression will only match if both conditions are met.
  
  @param expr the other expression
  @return self for chaining