remove unnecessary extra work in findall_with_existential/5
This commit is contained in:
@@ -944,17 +944,6 @@ findall(Template, Goal, Solutions0, Solutions1) :-
|
|||||||
builtins:findall_cleanup(LhLength, Error)
|
builtins:findall_cleanup(LhLength, Error)
|
||||||
).
|
).
|
||||||
|
|
||||||
:- non_counted_backtracking set_difference/3.
|
|
||||||
|
|
||||||
set_difference([X|Xs], [Y|Ys], Zs) :-
|
|
||||||
X == Y, !, set_difference(Xs, [Y|Ys], Zs).
|
|
||||||
set_difference([X|Xs], [Y|Ys], [X|Zs]) :-
|
|
||||||
X @< Y, !, set_difference(Xs, [Y|Ys], Zs).
|
|
||||||
set_difference([X|Xs], [Y|Ys], Zs) :-
|
|
||||||
X @> Y, !, set_difference([X|Xs], Ys, Zs).
|
|
||||||
set_difference([], _, []) :- !.
|
|
||||||
set_difference(Xs, [], Xs).
|
|
||||||
|
|
||||||
|
|
||||||
:- non_counted_backtracking iterate_variants/3.
|
:- non_counted_backtracking iterate_variants/3.
|
||||||
|
|
||||||
@@ -987,9 +976,7 @@ findall_with_existential(Template, Goal, PairedSolutions, Witnesses0, Witnesses)
|
|||||||
( Goal1 = _ ^ _ ) ->
|
( Goal1 = _ ^ _ ) ->
|
||||||
rightmost_power(Goal1, Goal2, ExistentialVars0),
|
rightmost_power(Goal1, Goal2, ExistentialVars0),
|
||||||
term_variables(ExistentialVars0, ExistentialVars),
|
term_variables(ExistentialVars0, ExistentialVars),
|
||||||
sort(Witnesses0, Witnesses1),
|
lists:append(Witnesses0, Witnesses, ExistentialVars),
|
||||||
sort(ExistentialVars, ExistentialVars1),
|
|
||||||
set_difference(Witnesses1, ExistentialVars1, Witnesses),
|
|
||||||
expand_goal(M:Goal2, M, Goal3),
|
expand_goal(M:Goal2, M, Goal3),
|
||||||
findall(Witnesses-Template, Goal3, PairedSolutions)
|
findall(Witnesses-Template, Goal3, PairedSolutions)
|
||||||
; Witnesses = Witnesses0,
|
; Witnesses = Witnesses0,
|
||||||
|
|||||||
Reference in New Issue
Block a user