This commit is contained in:
Vitor Santos Costa 2018-05-31 00:15:48 +01:00
parent bbd0122fc3
commit 7325407d23
3 changed files with 15 additions and 20 deletions

View File

@ -1744,6 +1744,7 @@ X_API bool YAP_EnterGoal(YAP_PredEntryPtr ape, CELL *ptr, YAP_dogoalinfo *dgi) {
// HR-H0,LCL0-ENV,LCL0-(CELL*)B,(CELL*)TR-LCL0, P, CP, LOCAL_CurSlot);
out = Yap_exec_absmi(true, false);
fprintf(stderr,"EnterGoal success=%d: H=%d ENV=%p B=%d TR=%d P=%p CP=%p Slots=%d\n", out,HR-H0,LCL0-ENV,LCL0-(CELL*)B,(CELL*)TR-LCL0, P, CP, LOCAL_CurSlot);
dgi->b = LCL0 - (CELL *)B;
if (out) {
dgi->EndSlot = LOCAL_CurSlot;
Yap_StartSlots();

View File

@ -72,11 +72,13 @@ python_query( Caller, String ) :-
atomic_to_term( String, Goal, VarNames ),
query_to_answer( Goal, VarNames, Status, Bindings),
atom_to_string( Status, SStatus ),
Caller.q.port := SStatus,
Caller.port := SStatus,
start_low_level_trace,
write_query_answer( Bindings ),
nl(user_error),
Caller.q.answer := {},
maplist(in_dict(Caller.q.answer), Bindings).
Caller.answer := {},
maplist(in_dict(Caller.answer), Bindings).
in_dict(Dict, var([V0,V|Vs])) :- !,
Dict[V] := V0,
@ -84,6 +86,6 @@ in_dict(Dict, var([V0,V|Vs])) :- !,
in_dict(_Dict, var([_],_G)) :- !.
in_dict(Dict, nonvar([V0|Vs],G)) :- !,
Dict[V0] := G,
in_dict( Dict, nonvar(Vs, Gs)).
in_dict( Dict, nonvar(Vs, G) ).
in_dict(_Dict, nonvar([],_G)) :- !.
in_dict(_, _).

View File

@ -53,37 +53,29 @@ class Predicate( YAPPredicate ):
def __init__(self, t, module=None):
super().__init__(t)
class Query:
class Query (YAPQuery):
"""Goal is a predicate instantiated under a specific environment """
def __init__(self, engine, g):
engine.reSet()
super().__init__(g)
self.engine = engine
self.q = engine.query(g)
if self.q:
self.port = "call"
self.bindings = None
self.engine = engine
self.answer = {}
self.port = "call"
self.bindings = None
self.answer = {}
def __iter__(self):
return self
def __next__(self):
if not self.q:
raise RuntimeError()
if self.port == "exit":
if self.port == "exit" or self.port == "fail":
return
else:
if self.q.next():
if self.next():
return self.port,self.answer
else:
self.close()
def close( self ):
if self.q:
self.q.close()
self.q = None
self.engine.reSet()
def name( name, arity):
try: