make YAP more compatible with SWI by going inside 0 arguments (obs from Roberto).

This commit is contained in:
Vítor Santos Costa 2010-12-14 12:39:24 +00:00
parent 57aafe5d23
commit 828f8b07f7
1 changed files with 19 additions and 21 deletions

View File

@ -316,6 +316,7 @@ expand_goal(G, NG) :-
'$do_expand'(G, M, NG), !. '$do_expand'(G, M, NG), !.
expand_goal(G, G). expand_goal(G, G).
'$do_expand'(G, _, G) :- var(G), !.
'$do_expand'(M:G, CurMod, M:GI) :- !, '$do_expand'(M:G, CurMod, M:GI) :- !,
'$do_expand'(G, M, GI). '$do_expand'(G, M, GI).
'$do_expand'(G, CurMod, GI) :- '$do_expand'(G, CurMod, GI) :-
@ -325,7 +326,8 @@ expand_goal(G, G).
-> ->
true true
; ;
recorded('$dialect',swi,_), system:goal_expansion(G, GI) recorded('$dialect',swi,_),
system:goal_expansion(G, GI)
-> ->
true true
; ;
@ -335,25 +337,21 @@ expand_goal(G, G).
; ;
user:goal_expansion(G, GI) user:goal_expansion(G, GI)
), !. ), !.
'$do_expand'((G1,G2), CurMod, (GI1,GI2)) :- '$do_expand'(G, CurMod, NG) :-
'$do_expand'(G1, CurMod, GI1), '$is_metapredicate'(G,CurMod), !,
'$do_expand'(G2, CurMod, GI2). functor(G, Name, Arity),
'$do_expand'((G1;G2), CurMod, (GI1;GI2)) :- prolog:'$meta_predicate'(Name,CurMod,Arity,PredDef),
'$do_expand'(G1, CurMod, GI1), G =.. [Name|GArgs],
'$do_expand'(G2, CurMod, GI2). PredDef =.. [Name|GDefs],
'$do_expand'((G1*->G2), CurMod, (GI1*->GI2)) :- '$expand_args'(GArgs, CurMod, GDefs, NGArgs),
'$do_expand'(G1, CurMod, GI1), NG =.. [Name|NGArgs].
'$do_expand'(G2, CurMod, GI2).
'$do_expand'((G1|G2), CurMod, (GI1|GI2)) :- '$expand_args'([], _, [], []).
'$do_expand'(G1, CurMod, GI1), '$expand_args'(A.GArgs, CurMod, 0.GDefs, NA.NGArgs) :-
'$do_expand'(G2, CurMod, GI2). '$do_expand'(A, CurMod, NA), !,
'$do_expand'((G1->G2), CurMod, (GI1->GI2)) :- '$expand_args'(GArgs, CurMod, GDefs, NGArgs).
'$do_expand'(G1, CurMod, GI1), '$expand_args'(A.GArgs, CurMod, _.GDefs, A.NGArgs) :-
'$do_expand'(G2, CurMod, GI2). '$expand_args'(GArgs, CurMod, GDefs, NGArgs).
'$do_expand'(\+G1, CurMod, \+GI1) :-
'$do_expand'(G1, CurMod, GI1).
'$do_expand'(not(G1), CurMod, not(GI1)) :-
'$do_expand'(G1, CurMod, GI1).
% args are: % args are:
% goal to expand % goal to expand
@ -476,7 +474,7 @@ expand_goal(G, G).
'$install_meta_predicate'(P, M1) :- '$install_meta_predicate'(P, M1) :-
functor(P,F,N), functor(P,F,N),
( M1 = prolog -> M = _ ; M1 = M), ( M1 = prolog -> M = _ ; M1 = M),
( retractall('$meta_predicate'(F,M,N,_)), fail ; true), ( retractall(prolog:'$meta_predicate'(F,M,N,_)), fail ; true),
asserta(prolog:'$meta_predicate'(F,M,N,P)), asserta(prolog:'$meta_predicate'(F,M,N,P)),
'$flags'(P, M1, Fl, Fl), '$flags'(P, M1, Fl, Fl),
NFlags is Fl \/ 0x200000, NFlags is Fl \/ 0x200000,