Warning: session_start(): open(/var/lib/php/sessions/sess_hcpcigji1s6cu8d2fn2klg91fq, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
!752
!1002813 // gnu prolog
import gnu.prolog.vm.*;
import gnu.prolog.term.*;
import gnu.prolog.database.*;
static S prolog = [[
here([]).
here2([hello]).
]];
static int query(Interpreter intp, Term term) ctex {
try {
Interpreter.Goal goal = intp.prepareGoal(term);
ret intp.execute(goal);
// todo: stop goal?
} catch (Exception e) {
print("fail " + e);
ret 0;
}
}
static Interpreter interpreter;
p {
new Environment env;
S streamName = "someinput";
Reader reader = new StringReader(prolog);
new PrologTextLoader(env.getPrologTextLoaderState(), reader, streamName);
List errors = env.getLoadingErrors();
for (PrologTextLoaderError error : errors) {
printStackTrace(error);
}
interpreter = env.createInterpreter();
env.runInitialization(interpreter);
getIt("here");
getIt("here2");
}
static void getIt(S function) {
VariableTerm x = new VariableTerm("X");
printVar(x);
Term term = new CompoundTerm(function, new Term[] {x});
print("Term: " + term);
print(query(interpreter, term));
printVar(x);
}
static void printVar(VariableTerm x) {
Term t = x.dereference();
print(x.name + " = " + t + " (" + t.getClass().getName() + ")");
print(" Lisp: " + toLisp(t));
}
static Lisp toLisp(Term term) {
if (term instanceof AtomTerm)
ret lisp(((AtomTerm) term).value);
if (term instanceof VariableTerm)
ret lisp(((VariableTerm) term).name);
if (term instanceof CompoundTerm) {
CompoundTerm c = cast term;
Lisp l = new Lisp(c.tag.functor.value);
for (Term arg : c.args)
l.add(toLisp(arg));
ret l;
}
ret lisp("? " + term.getClass().getName());
}