docs: @Override
      public boolean hasNext() {
          nextAnswer = findNextAnswer();
          if (nextAnswer != null) return true;
  
          //iter finished
          if (reiterationRequired) {
              long dAns = answers.size() - oldAns;
              if (dAns != 0 || iter == 0) {
                  LOG.debug("iter: {} answers: {} dAns = {}", iter, answers.size(), dAns);
                  iter++;
                  states.push(query.subGoal(new ConceptMap(), new UnifierImpl(), null, new HashSet<>()));
                  oldAns = answers.size();
                  return hasNext();
              }
          }
  
          toComplete.forEach(query.tx().queryCache()::ackCompleteness);
  
          return false;
      }