]> Repositorios git - scryer-prolog.git/commitdiff
shorter include/3 and exclude/3, relying on improved indexing
authorMarkus Triska <[email protected]>
Fri, 8 Sep 2023 20:40:50 +0000 (22:40 +0200)
committerMarkus Triska <[email protected]>
Sat, 9 Sep 2023 05:32:06 +0000 (07:32 +0200)
src/lib/clpb.pl

index fdf1cfce9050458f673ffb848748212823cadaa9..311d611523210be8a12c65a17762f48080c0579f 100644 (file)
@@ -1949,29 +1949,21 @@ Compatibility predicates.
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
 
 
-include(Goal, List, Is) :-
-        include_(List, Goal, Is).
-
-include_([], _, []).
-include_([X1|Xs1], P, Is) :-
-        (   call(P, X1)
-        ->  Is = [X1|Is1]
-        ;   Is = Is1
+include(_, [], []).
+include(Goal, [L|Ls0], Ls) :-
+        (   call(Goal, L) ->
+            Ls = [L|Rest]
+        ;   Ls = Rest
         ),
-        include_(Xs1, P, Is1).
+        include(Goal, Ls0, Rest).
 
-
-exclude(Goal, List, Is) :-
-        exclude_(List, Goal, Is).
-
-exclude_([], _, []).
-exclude_([X1|Xs1], P, Is) :-
-        (   call(P, X1)
-        ->  Is = Is1
-        ;   Is = [X1|Is1]
+exclude(_, [], []).
+exclude(Goal, [L|Ls0], Ls) :-
+        (   call(Goal, L) ->
+            Ls = Rest
+        ;   Ls = [L|Rest]
         ),
-        exclude_(Xs1, P, Is1).
-
+        exclude(Goal, Ls0, Rest).
 
 partition(Pred, List, Less, Equal, Greater) :-
     partition_(List, Pred, Less, Equal, Greater).