예제 #1
0
 /** Return the clause to load. */
 public ClauseInfo fetch() {
   if (clauses == null) return null;
   deunify(vars);
   if (!checkCompatibility(goal)) return null;
   ClauseInfo clause = (ClauseInfo) clauses.getHead();
   clauses = clauses.getTail();
   haveAlternatives = checkCompatibility(goal);
   return clause;
 }
예제 #2
0
 public List<ClauseInfo> getClauses() {
   List<ClauseInfo> l = new ArrayList<ClauseInfo>();
   OneWayList<ClauseInfo> t = clauses;
   while (t != null) {
     l.add(t.getHead());
     t = t.getTail();
   }
   return l;
 }
예제 #3
0
 /**
  * Verify if a clause exists that is compatible with goal. As a side effect, clauses that are not
  * compatible get discarded from the currently examined family.
  *
  * @param goal
  */
 private boolean checkCompatibility(Term goal) {
   if (clauses == null) return false;
   ClauseInfo clause = null;
   do {
     clause = (ClauseInfo) clauses.getHead();
     if (goal.match(clause.getHead())) return true;
     clauses = clauses.getTail();
   } while (clauses != null);
   return false;
 }
예제 #4
0
 /**
  * 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;
 }