:- module(pairs, [pairs_keys_values/3,
pairs_keys/2,
pairs_values/2,
+ group_pairs_by_key/2,
map_list_to_pairs/3]).
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).