use of de.prob.prolog.term.ListPrologTerm in project prob2 by bendisposto.
the class CbcSolveCommand method processResult.
@Override
public void processResult(final ISimplifiedROMap<String, PrologTerm> bindings) {
PrologTerm idList = bindings.get(IDENTIFIER_LIST);
if (idList instanceof ListPrologTerm) {
for (PrologTerm id : (ListPrologTerm) idList) {
freeVariables.add(id.getFunctor());
}
}
PrologTerm prologTerm = bindings.get(EVALUATE_TERM_VARIABLE);
assert prologTerm instanceof CompoundPrologTerm;
String functor = prologTerm.getFunctor();
if ("time_out".equals(functor)) {
result = new ComputationNotCompletedResult(evalElement.getCode(), "time out");
}
if ("contradiction_found".equals(functor)) {
result = EvalResult.FALSE;
}
if ("solution".equals(functor)) {
ListPrologTerm solutionBindings = BindingGenerator.getList(prologTerm.getArgument(BINDINGS));
if (solutionBindings.isEmpty()) {
result = EvalResult.TRUE;
return;
}
Map<String, String> solutions = new HashMap<>();
for (PrologTerm b : solutionBindings) {
CompoundPrologTerm t = (CompoundPrologTerm) b;
solutions.put(t.getArgument(VAR_NAME).getFunctor(), t.getArgument(PRETTY_PRINT).getFunctor());
}
result = new EvalResult("TRUE", solutions);
}
if ("no_solution_found".equals(functor)) {
result = new ComputationNotCompletedResult(evalElement.getCode(), "no solution found (but one might exist)");
}
}
use of de.prob.prolog.term.ListPrologTerm in project prob2 by bendisposto.
the class GetOperationByPredicateCommand method processResult.
/**
* This method is called to extract relevant information from ProB's answer.
* The method is called by the Animator class, most likely it is not
* interesting for other classes.
*
* @see de.prob.animator.command.AbstractCommand#writeCommand(de.prob.prolog.output.IPrologTermOutput)
*/
@Override
public void processResult(final ISimplifiedROMap<String, PrologTerm> bindings) {
ListPrologTerm list = BindingGenerator.getList(bindings.get(NEW_STATE_ID_VARIABLE));
for (PrologTerm prologTerm : list) {
CompoundPrologTerm cpt = BindingGenerator.getCompoundTerm(prologTerm, 4);
operations.add(Transition.createTransitionFromCompoundPrologTerm(s, cpt));
}
for (PrologTerm prologTerm : BindingGenerator.getList(bindings.get(ERRORS_VARIABLE))) {
this.errors.add(prologTerm.getFunctor());
}
}
use of de.prob.prolog.term.ListPrologTerm in project prob2 by bendisposto.
the class GetOperationsWithTimeout method processResult.
@Override
public void processResult(final ISimplifiedROMap<String, PrologTerm> bindings) {
ListPrologTerm list = BindingGenerator.getList(bindings, TIMEOUT_VARIABLE);
timeouts = PrologTerm.atomicStrings(list);
}
use of de.prob.prolog.term.ListPrologTerm in project prob2 by bendisposto.
the class FindTraceBetweenNodesCommand method processResult.
@Override
public void processResult(final ISimplifiedROMap<String, PrologTerm> bindings) {
PrologTerm trace = bindings.get(TRACE);
if (trace instanceof ListPrologTerm) {
for (PrologTerm term : (ListPrologTerm) trace) {
newTransitions.add(Transition.createTransitionFromCompoundPrologTerm(stateSpace, (CompoundPrologTerm) term));
}
} else {
String msg = "Trace was not found. Error was: " + trace.getFunctor();
logger.error(msg);
throw new NoTraceFoundException(msg);
}
}
use of de.prob.prolog.term.ListPrologTerm in project prob2 by bendisposto.
the class EvaluateRegisteredFormulasCommand method processResult.
@Override
public void processResult(final ISimplifiedROMap<String, PrologTerm> bindings) {
PrologTerm terms = bindings.get(RESULTS_VARIABLE);
if (terms instanceof ListPrologTerm) {
ListPrologTerm lpt = BindingGenerator.getList(terms);
for (int i = 0; i < lpt.size(); i++) {
PrologTerm pt = lpt.get(i);
IEvalElement key = formulas.get(i);
results.put(key, EvalResult.getEvalResult(pt));
}
}
}
Aggregations