From 86beb222ae092baf7a0316eecb82810058fac65b Mon Sep 17 00:00:00 2001 From: Markus Triska Date: Thu, 4 May 2023 00:50:27 +0200 Subject: [PATCH] rely on first instantiated argument indexing in the definitions of foldl/N This allows shorter and more natural definitions. --- src/lib/lists.pl | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/src/lib/lists.pl b/src/lib/lists.pl index 92bc202d..815e2b2a 100644 --- a/src/lib/lists.pl +++ b/src/lib/lists.pl @@ -295,25 +295,19 @@ same_length([_|As], [_|Bs]) :- % sum_list(Ls, S) :- foldl(sum_, Ls, 0, S). % ``` -foldl(Goal_3, Ls, A0, A) :- - foldl_(Ls, Goal_3, A0, A). - -foldl_([], _, A, A). -foldl_([L|Ls], G_3, A0, A) :- +foldl(_, [], A, A). +foldl(G_3, [L|Ls], A0, A) :- call(G_3, L, A0, A1), - foldl_(Ls, G_3, A1, A). + foldl(G_3, Ls, A1, A). %% foldl(+Predicate, ?Ls0, ?Ls1, +A0, ?A). % % Same as `foldl/4` but with an extra list -foldl(Goal_4, Xs, Ys, A0, A) :- - foldl_(Xs, Ys, Goal_4, A0, A). - -foldl_([], [], _, A, A). -foldl_([X|Xs], [Y|Ys], G_4, A0, A) :- +foldl(_, [], [], A, A). +foldl(G_4, [X|Xs], [Y|Ys], A0, A) :- call(G_4, X, Y, A0, A1), - foldl_(Xs, Ys, G_4, A1, A). + foldl(G_4, Xs, Ys, A1, A). %% transpose(?Ls, ?Ts). % -- 2.54.0