/**
  * Check if a choice point exists in the store. As a side effect, removes choice points which have
  * been already used and are now empty.
  *
  * @return
  */
 protected boolean existChoicePoint() {
   if (pointer == null) return false;
   ClauseStore clauses;
   do {
     clauses = pointer.compatibleGoals;
     if (clauses.existCompatibleClause()) return true;
     pointer = pointer.prevChoicePointContext;
   } while (pointer != null);
   return false;
 }
 /**
  * Load a clause family.
  *
  * @param familyClauses
  */
 public static ClauseStore build(Term goal, List<Var> vars, List<ClauseInfo> familyClauses) {
   ClauseStore clauseStore = new ClauseStore(goal, vars);
   clauseStore.clauses = OneWayList.transform(familyClauses);
   if (clauseStore.clauses == null || !clauseStore.existCompatibleClause()) return null;
   return clauseStore;
 }