diff --git a/src/prolog/lib/pairs.pl b/src/prolog/lib/pairs.pl index f3b00108..adcfb138 100644 --- a/src/prolog/lib/pairs.pl +++ b/src/prolog/lib/pairs.pl @@ -1,6 +1,7 @@ :- module(pairs, [pairs_keys_values/3, pairs_keys/2, pairs_values/2, + group_pairs_by_key/2, map_list_to_pairs/3]). @@ -19,3 +20,14 @@ map_list_to_pairs2([], _, []). map_list_to_pairs2([H|T0], Pred, [K-H|T]) :- call(Pred, H, K), map_list_to_pairs2(T0, Pred, T). + + +group_pairs_by_key([], []). +group_pairs_by_key([K-V|KVs0], [K-[V|Vs]|KVs]) :- + same_key(K, KVs0, Vs, KVs1), + group_pairs_by_key(KVs1, KVs). + +same_key(K0, [K1-V|KVs0], [V|Vs], KVs) :- + K0 == K1, !, + same_key(K0, KVs0, Vs, KVs). +same_key(_, KVs, [], KVs).