fix ground cyclic terms (thanks to Paulo).
This commit is contained in:
parent
e6fb32d9ca
commit
8eede3eb73
18
pl/setof.yap
18
pl/setof.yap
@ -150,7 +150,7 @@ bagof(Template, Generator, Bag) :-
|
|||||||
; L = L0
|
; L = L0
|
||||||
).
|
).
|
||||||
'$excess_vars'(A, A, _, L, L) :-
|
'$excess_vars'(A, A, _, L, L) :-
|
||||||
atomic(A), !.
|
ground(A), !.
|
||||||
'$excess_vars'(X^P, NP, Y, L0, L) :- !,
|
'$excess_vars'(X^P, NP, Y, L0, L) :- !,
|
||||||
'$variables_in_term'(X+Y, [], NY),
|
'$variables_in_term'(X+Y, [], NY),
|
||||||
'$excess_vars'(P, NP, NY, L0, L).
|
'$excess_vars'(P, NP, NY, L0, L).
|
||||||
@ -166,6 +166,22 @@ bagof(Template, Generator, Bag) :-
|
|||||||
'$excess_vars'(S, _, Y, L0, L).
|
'$excess_vars'(S, _, Y, L0, L).
|
||||||
'$excess_vars'(\+G, \+G, _, L0, LF) :- !,
|
'$excess_vars'(\+G, \+G, _, L0, LF) :- !,
|
||||||
L0 = LF.
|
L0 = LF.
|
||||||
|
'$excess_vars'((G1,G2), (NG1, NG2), Y, L0, LF) :- !,
|
||||||
|
'$excess_vars'(G1, NG1, Y, L0, L1),
|
||||||
|
'$excess_vars'(G2, NG2, Y, L1, LF).
|
||||||
|
'$excess_vars'((G1;G2), (NG1; NG2), Y, L0, LF) :- !,
|
||||||
|
'$excess_vars'(G1, NG1, Y, L0, L1),
|
||||||
|
'$excess_vars'(G2, NG2, Y, L1, LF).
|
||||||
|
'$excess_vars'((G1->G2), (NG1-> NG2), Y, L0, LF) :- !,
|
||||||
|
'$excess_vars'(G1, NG1, Y, L0, L1),
|
||||||
|
'$excess_vars'(G2, NG2, Y, L1, LF).
|
||||||
|
'$excess_vars'((G1*->G2), (NG1 *-> NG2), Y, L0, LF) :- !,
|
||||||
|
'$excess_vars'(G1, NG1, Y, L0, L1),
|
||||||
|
'$excess_vars'(G2, NG2, Y, L1, LF).
|
||||||
|
'$excess_vars'(if(G1,G2,G3), if(NG1, NG2, NG3), Y, L0, LF) :- !,
|
||||||
|
'$excess_vars'(G1, NG1, Y, L0, L1),
|
||||||
|
'$excess_vars'(G2, NG2, Y, L1, L2),
|
||||||
|
'$excess_vars'(G3, NG3, Y, L2, LF).
|
||||||
'$excess_vars'(_:G1, M:NG, Y, L0, LF) :- nonvar(G1), G1 = M:G, !,
|
'$excess_vars'(_:G1, M:NG, Y, L0, LF) :- nonvar(G1), G1 = M:G, !,
|
||||||
'$excess_vars'(G, NG, Y, L0, LF).
|
'$excess_vars'(G, NG, Y, L0, LF).
|
||||||
'$excess_vars'(M:G, M:NG, Y, L0, LF) :- !,
|
'$excess_vars'(M:G, M:NG, Y, L0, LF) :- !,
|
||||||
|
Reference in New Issue
Block a user