]> Repositorios git - scryer-prolog.git/commitdiff
remove unnecessary extra work in findall_with_existential/5 setof_correction_and_opt origin/setof_correction_and_opt
authorMark Thom <[email protected]>
Tue, 13 Jan 2026 06:47:39 +0000 (22:47 -0800)
committerMark Thom <[email protected]>
Thu, 15 Jan 2026 04:39:48 +0000 (20:39 -0800)
src/lib/builtins.pl

index 9253aabf95f9b860968be96b1590d6f97a0ff57c..65c829a5064cc420c9a7628b76dbdc2c23131ad7 100644 (file)
@@ -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,