25 lines
		
	
	
		
			408 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			25 lines
		
	
	
		
			408 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								:- module(gensym, [
							 | 
						||
| 
								 | 
							
									gensym/2,
							 | 
						||
| 
								 | 
							
									reset_gensym/1,
							 | 
						||
| 
								 | 
							
									reset_gensym/0
							 | 
						||
| 
								 | 
							
								    ]).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- dynamic gensym_key/2.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								gensym(Atom, New) :-
							 | 
						||
| 
								 | 
							
									retract(gensym_key(Atom,Id)), !,
							 | 
						||
| 
								 | 
							
									atomic_concat(Atom,Id,New),
							 | 
						||
| 
								 | 
							
									NId is Id+1,
							 | 
						||
| 
								 | 
							
									assert(gensym_key(Atom,NId)).
							 | 
						||
| 
								 | 
							
								gensym(Atom, New) :-
							 | 
						||
| 
								 | 
							
									atomic_concat(Atom,1,New),
							 | 
						||
| 
								 | 
							
									assert(gensym_key(Atom,2)).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								reset_gensym(Atom) :-
							 | 
						||
| 
								 | 
							
									retract(gensym_key(Atom,_)).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								reset_gensym :-
							 | 
						||
| 
								 | 
							
									retractall(gensym_key(_,_)).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 |