/** * Translate inferred rule binding into a Rule-VariableBinding pair. */ public Pair<Rule, VariableBinding> translateFact(Fact fact) { Pair<Rule, VariableBinding> partialApplication = null; if( (fact.getElements().size() >= VARSTARTPOS) && (fact.getElements().get( 0 ).equals( VARBINDING )) ) { Pair<Rule, List<AtomVariable>> ruleVarPair = ruleMap.get( fact.getElements().get( RULEPOS ) ); Rule rule = ruleVarPair.first; List<AtomVariable> vars = ruleVarPair.second; List<ATermAppl> constants = fact.getElements().subList( VARSTARTPOS, fact.getElements().size() ); if( vars.size() != constants.size() ) throw new InternalReasonerException( "Variable list doesn't match constants!" ); VariableBinding binding = new VariableBinding( abox ); for( int i = 0; i < vars.size(); i++ ) vars.get( i ).accept( new BindingSetter( binding, constants.get( i ) ) ); partialApplication = new Pair<Rule, VariableBinding>( rule, binding ); } return partialApplication; }