From: Mark Thom Date: Tue, 13 Jan 2026 06:47:39 +0000 (-0800) Subject: remove unnecessary extra work in findall_with_existential/5 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=c79fd7433154cbaf7fa548d361fdddf3dcc3e001;p=scryer-prolog.git remove unnecessary extra work in findall_with_existential/5 --- diff --git a/src/lib/builtins.pl b/src/lib/builtins.pl index 9253aabf..65c829a5 100644 --- a/src/lib/builtins.pl +++ b/src/lib/builtins.pl @@ -944,17 +944,6 @@ findall(Template, Goal, Solutions0, Solutions1) :- 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. @@ -987,9 +976,7 @@ findall_with_existential(Template, Goal, PairedSolutions, Witnesses0, Witnesses) ( Goal1 = _ ^ _ ) -> rightmost_power(Goal1, Goal2, ExistentialVars0), term_variables(ExistentialVars0, ExistentialVars), - sort(Witnesses0, Witnesses1), - sort(ExistentialVars, ExistentialVars1), - set_difference(Witnesses1, ExistentialVars1, Witnesses), + lists:append(Witnesses0, Witnesses, ExistentialVars), expand_goal(M:Goal2, M, Goal3), findall(Witnesses-Template, Goal3, PairedSolutions) ; Witnesses = Witnesses0,