79 lines
1.3 KiB
Prolog
79 lines
1.3 KiB
Prolog
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
%% _ _ _ _
|
|
%% _ __ __ _(_)_ __| (_)___| |_
|
|
%% | '_ \ / _` | | '__| | / __| __|
|
|
%% | |_) | (_| | | | | | \__ \ |_
|
|
%% | .__/ \__,_|_|_| |_|_|___/\__|
|
|
%% |_|
|
|
%%
|
|
%% * author: Tom Schrijvers
|
|
|
|
:- module(pairlist,[
|
|
fst_of_pairs/2,
|
|
lookup/3,
|
|
lookup_any/3,
|
|
lookup_eq/3,
|
|
lookup_any_eq/3,
|
|
pairup/3,
|
|
snd_of_pairs/2,
|
|
translate/3,
|
|
pairlist_delete_eq/3
|
|
]).
|
|
|
|
fst_of_pairs([],[]).
|
|
fst_of_pairs([X-_|XYs],[X|Xs]) :-
|
|
fst_of_pairs(XYs,Xs).
|
|
|
|
snd_of_pairs([],[]).
|
|
snd_of_pairs([_-Y|XYs],[Y|Ys]) :-
|
|
snd_of_pairs(XYs,Ys).
|
|
|
|
pairup([],[],[]).
|
|
pairup([X|Xs],[Y|Ys],[X-Y|XYs]) :-
|
|
pairup(Xs,Ys,XYs).
|
|
|
|
lookup([K - V | KVs],Key,Value) :-
|
|
( K = Key ->
|
|
V = Value
|
|
;
|
|
lookup(KVs,Key,Value)
|
|
).
|
|
|
|
lookup_any([K - V | KVs],Key,Value) :-
|
|
(
|
|
K = Key,
|
|
V = Value
|
|
;
|
|
lookup_any(KVs,Key,Value)
|
|
).
|
|
|
|
lookup_eq([K - V | KVs],Key,Value) :-
|
|
( K == Key ->
|
|
V = Value
|
|
;
|
|
lookup_eq(KVs,Key,Value)
|
|
).
|
|
|
|
lookup_any_eq([K - V | KVs],Key,Value) :-
|
|
(
|
|
K == Key,
|
|
V = Value
|
|
;
|
|
lookup_any_eq(KVs,Key,Value)
|
|
).
|
|
|
|
translate([],_,[]).
|
|
translate([X|Xs],Dict,[Y|Ys]) :-
|
|
lookup_eq(Dict,X,Y),
|
|
translate(Xs,Dict,Ys).
|
|
|
|
pairlist_delete_eq([], _, []).
|
|
pairlist_delete_eq([K - V| KVs], Key, PL) :-
|
|
( Key == K ->
|
|
PL = KVs
|
|
;
|
|
PL = [ K - V | T ],
|
|
pairlist_delete_eq(KVs, Key, T)
|
|
).
|
|
|