improve prism compatibility (fix asia).

This commit is contained in:
Vitor Santos Costa 2012-12-14 08:26:56 +00:00
parent 524edecdd3
commit 84b0529060
2 changed files with 35 additions and 14 deletions

View File

@ -81,10 +81,10 @@ getclauses1(File, Prog, _Opts) :-
'$bpe_process_pred'([], _F, N, Mode, _Delay, _Tabled, []) --> '$bpe_process_pred'([], _F, N, Mode, _Delay, _Tabled, []) -->
{ '$init_mode'(N, Mode) }. { '$init_mode'(N, Mode) }.
'$bpe_process_pred'(Call.Prog0, F,N,Modes,Delay,Tabled, Cls0) --> '$bpe_process_pred'([Call|Prog0], F,N, Modes, Delay, Tabled, Cls0) -->
{ '$get_pred'(Call, F, N, Modes, Delay, Tabled, Cls0, ClsI) }, !, { '$get_pred'(Call, F, N, Modes, Delay, Tabled, Cls0, ClsI) }, !,
'$bpe_process_pred'(Prog0, F,N,Modes,Delay,Tabled, ClsI). '$bpe_process_pred'(Prog0, F, N, Modes, Delay, Tabled, ClsI).
'$bpe_process_pred'(Call.Prog0, F,N,Modes,Delay,Tabled, Cls0) --> '$bpe_process_pred'([Call|Prog0], F, N, Modes, Delay, Tabled, Cls0) -->
[ Call ], [ Call ],
'$bpe_process_pred'(Prog0, F,N,Modes,Delay,Tabled, Cls0). '$bpe_process_pred'(Prog0, F,N,Modes,Delay,Tabled, Cls0).
@ -97,21 +97,22 @@ getclauses1(File, Prog, _Opts) :-
'$get_pred'((P :- Q), F, N, _Modes, _Delay, _Tabled) --> '$get_pred'((P :- Q), F, N, _Modes, _Delay, _Tabled) -->
{ functor(P, F, N), ! }, { functor(P, F, N), ! },
[(P:-Q)]. [(P:-Q)].
'$get_pred'((:- mode Q), F, N, _Modes, _Delay, _Tabled) --> '$get_pred'((:- mode Q), F, N, Modes, _Delay, _Tabled) -->
{ functor(Q, F, N), !, Q =.. [_|Modes0], { functor(Q, F, N), !, Q =.. [_|Modes0],
'$bpe_cvt_modes'(Modes0,Modes,[]) '$bpe_cvt_modes'(Modes0, Modes, [])
}, },
[]. [].
%'$get_pred'((:- table _), F, N, Modes, Delay, Tabled) --> %'$get_pred'((:- table _), F, N, Modes, Delay, Tabled) -->
% { functor(Q, F, N), !, Q =.. [_|Modes] }, % { functor(Q, F, N), !, Q =.. [_|Modes] },
% []. % [].
'$get_pred'((:- _), _F, _N, _Modes, _Delay, _Tabled) --> !, { fail }. '$get_pred'((:- Q), '$damon_load', 0, _Modes, _Delay, _Tabled) -->
[ ('$damon_load' :- '$query'( Q ) )].
'$get_pred'((P), F, N, _Modes, _Delay, _Tabled) --> '$get_pred'((P), F, N, _Modes, _Delay, _Tabled) -->
{ functor(P, F, N), ! }, { functor(P, F, N), ! },
[(P)]. [(P)].
'$bpe_cvt_modes'(Mode.Modes0) --> [NewMode], '$bpe_cvt_modes'([Mode|Modes0]) --> [NewMode],
{ '$bpe_cvt_mode'(Mode, NewMode) }, { '$bpe_cvt_mode'(Mode, NewMode) },
'$bpe_cvt_modes'(Modes0). '$bpe_cvt_modes'(Modes0).
'$bpe_cvt_modes'([]) --> []. '$bpe_cvt_modes'([]) --> [].
@ -127,20 +128,40 @@ preprocess_cl(Cl, Cl, _, _, _, _).
phase_1_process(Prog, Prog). phase_1_process(Prog, Prog).
compileProgToFile(_,_File,[]). compileProgToFile(_, _File, []).
compileProgToFile(_,File,pred(F,N,_,_,Tabled,Clauses).Prog2) :- compileProgToFile(_, File, [Pred|Prog2]) :-
consult_pred(Pred),
compileProgToFile(_, File, Prog2).
consult_preds([], L) :- !,
consult_preds(L).
consult_preds(L0, L) :-
writeln(consult_preds(L0,L)).
consult_preds([]).
consult_preds([P|L]) :-
consult_pred(P),
consult_preds(L).
consult_pred(pred(F,N,_Mode,_Delay,Tabled,Clauses)) :-
(nonvar(Tabled) -> table(F/N) ; true), (nonvar(Tabled) -> table(F/N) ; true),
functor(S,F,N), functor(S,F,N),
assert(b_IS_CONSULTED_c(S)), assert(b_IS_CONSULTED_c(S)),
'$assert_clauses'(Clauses), abolish(F/N),
compileProgToFile(_,File,Prog2). '$assert_clauses'(Clauses).
add_pred(Name, Arity, _Mode, _Delay, Tabled, Clauses) :-
'$assert_clauses'(Clauses).
'$assert_clauses'([]). '$assert_clauses'([]).
'$assert_clauses'(Cl.Clauses) :- '$assert_clauses'([Cl|Clauses]) :-
assert_static(Cl), assert_static(Cl),
'$assert_clauses'(Clauses). '$assert_clauses'(Clauses).
'$myload'(_F). '$myload'(_F) :-
'$damon_load'.
'$query'(G) :- call(G).
initialize_table :- abolish_all_tables. initialize_table :- abolish_all_tables.

View File

@ -106,7 +106,7 @@ $pp_expl_one_goal(failure) :- !,
$pp_expl_failure. $pp_expl_failure.
$pp_expl_one_goal(Goal) :- $pp_expl_one_goal(Goal) :-
$pp_is_dummy_goal(Goal),!, $pp_is_dummy_goal(Goal),!,
call(Goal). ( call(Goal), fail ; true ).
$pp_expl_one_goal(Goal) :- $pp_expl_one_goal(Goal) :-
% FIXME: handling non-tabled probabilistic predicate is future work % FIXME: handling non-tabled probabilistic predicate is future work
$pp_require_tabled_probabilistic_atom(Goal,$msg(0006),$pp_expl_one_goal/1), $pp_require_tabled_probabilistic_atom(Goal,$msg(0006),$pp_expl_one_goal/1),