shorter include/3 and exclude/3, relying on improved indexing
This commit is contained in:
@@ -1949,29 +1949,21 @@ Compatibility predicates.
|
|||||||
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||||||
|
|
||||||
|
|
||||||
include(Goal, List, Is) :-
|
include(_, [], []).
|
||||||
include_(List, Goal, Is).
|
include(Goal, [L|Ls0], Ls) :-
|
||||||
|
( call(Goal, L) ->
|
||||||
include_([], _, []).
|
Ls = [L|Rest]
|
||||||
include_([X1|Xs1], P, Is) :-
|
; Ls = Rest
|
||||||
( call(P, X1)
|
|
||||||
-> Is = [X1|Is1]
|
|
||||||
; Is = Is1
|
|
||||||
),
|
),
|
||||||
include_(Xs1, P, Is1).
|
include(Goal, Ls0, Rest).
|
||||||
|
|
||||||
|
exclude(_, [], []).
|
||||||
exclude(Goal, List, Is) :-
|
exclude(Goal, [L|Ls0], Ls) :-
|
||||||
exclude_(List, Goal, Is).
|
( call(Goal, L) ->
|
||||||
|
Ls = Rest
|
||||||
exclude_([], _, []).
|
; Ls = [L|Rest]
|
||||||
exclude_([X1|Xs1], P, Is) :-
|
|
||||||
( call(P, X1)
|
|
||||||
-> Is = Is1
|
|
||||||
; Is = [X1|Is1]
|
|
||||||
),
|
),
|
||||||
exclude_(Xs1, P, Is1).
|
exclude(Goal, Ls0, Rest).
|
||||||
|
|
||||||
|
|
||||||
partition(Pred, List, Less, Equal, Greater) :-
|
partition(Pred, List, Less, Equal, Greater) :-
|
||||||
partition_(List, Pred, Less, Equal, Greater).
|
partition_(List, Pred, Less, Equal, Greater).
|
||||||
|
|||||||
Reference in New Issue
Block a user