* @return Cons
   */
  public Cons removeIf(java.lang.reflect.Method testP) {
    { Cons self = this;

      { Cons cursor = self;
        Cons trailer = null;

        while (!(cursor == Stella.NIL)) {
          if (((Boolean)(edu.isi.stella.javalib.Native.funcall(testP, null, new java.lang.Object [] {cursor.value}))).booleanValue() &&
              (trailer != null)) {
            {
              trailer.rest = cursor.rest;
              cursor = trailer.rest;
            }
          }
          else {
            {
              trailer = cursor;
              cursor = cursor.rest;
            }
          }
        }
        cursor = self;
        if ((!(cursor == Stella.NIL)) &&
            ((Boolean)(edu.isi.stella.javalib.Native.funcall(testP, null, new java.lang.Object [] {cursor.value}))).booleanValue()) {
          trailer = cursor.rest;
          return (trailer);
        }
        return (self);
      }
    }
  }