79 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
		
		
			
		
	
	
			79 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
| 
								 | 
							
								%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
							 | 
						||
| 
								 | 
							
								%%              _      _ _     _
							 | 
						||
| 
								 | 
							
								%%  _ __   __ _(_)_ __| (_)___| |_
							 | 
						||
| 
								 | 
							
								%% | '_ \ / _` | | '__| | / __| __|
							 | 
						||
| 
								 | 
							
								%% | |_) | (_| | | |  | | \__ \ |_
							 | 
						||
| 
								 | 
							
								%% | .__/ \__,_|_|_|  |_|_|___/\__|
							 | 
						||
| 
								 | 
							
								%% |_|
							 | 
						||
| 
								 | 
							
								%%
							 | 
						||
| 
								 | 
							
								%% * 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)
							 | 
						||
| 
								 | 
							
									).
							 | 
						||
| 
								 | 
							
								
							 |