From: Markus Triska Date: Sat, 25 Feb 2023 09:17:55 +0000 (+0100) Subject: rely on first instantiated argument indexing X-Git-Tag: v0.9.2~176^2 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=997161c74036f865ea3a98742bc734c9db96bfb9;p=scryer-prolog.git rely on first instantiated argument indexing This great improvement to indexing allows much more natural definitions of virtually all meta-predicates. Many thanks to @notoria! --- diff --git a/src/lib/clpz.pl b/src/lib/clpz.pl index 9404097e..fd5d9d18 100644 --- a/src/lib/clpz.pl +++ b/src/lib/clpz.pl @@ -220,31 +220,23 @@ partition_([X|Xs], Pred, Ls0, Es0, Gs0) :- :- meta_predicate(include(1, ?, ?)). -include(Goal, Ls0, Ls) :- - include_(Ls0, Goal, Ls). - -include_([], _, []). -include_([L|Ls0], Goal, Ls) :- +include(_, [], []). +include(Goal, [L|Ls0], Ls) :- ( call(Goal, L) -> Ls = [L|Rest] ; Ls = Rest ), - include_(Ls0, Goal, Rest). - + include(Goal, Ls0, Rest). :- meta_predicate(exclude(1, ?, ?)). -exclude(Goal, Ls0, Ls) :- - exclude_(Ls0, Goal, Ls). - -exclude_([], _, []). -exclude_([L|Ls0], Goal, Ls) :- +exclude(_, [], []). +exclude(Goal, [L|Ls0], Ls) :- ( call(Goal, L) -> Ls = Rest ; Ls = [L|Rest] ), - exclude_(Ls0, Goal, Rest). - + exclude(Goal, Ls0, Rest). %:- discontiguous clpz:goal_expansion/5.