Я изо всех сил пытаюсь сделать это. У меня есть пользовательский интерфейс на Java, который управляет системой с использованием JPL, пролог.
Сначала я запускаю простой запрос assert(goal( work_1 ))
. Когда процесс завершен, он просто утверждает done( work_1 )
. Для обработки следующей цели goal( do(work_2 )
я должен дождаться факта done( work_1 )
.
for (String s : t) {
runQuery("assert(goal(" + s + "))"); //start process
//
// Here the User Interface should block until done(A) and A == s
//
while (!active) {
Map<String, Term>[] Q = Query.allSolutions("done(Goal)");
for (Map<String, Term> sol : Q) {
String str = "" + sol.get("Goal");
if (str.equals(s)) {
active = false;
}
}
runQuery("retract(done(_))");
}
Как я могу заставить это работать правильно?