46 lines
		
	
	
		
			836 B
		
	
	
	
		
			Prolog
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			836 B
		
	
	
	
		
			Prolog
		
	
	
	
	
	
| /**
 | |
|  * @file   varnumbers.yap
 | |
|  * @author VITOR SANTOS COSTA <vsc@VITORs-MBP.lan>
 | |
|  * @date   2006
 | |
|  * 
 | |
|  * @brief  opposite to numbervars
 | |
|  * 
 | |
|  * 
 | |
| */
 | |
| 
 | |
| :- module(varnumbers, [
 | |
| 		  numbervars/1,
 | |
| 		  max_var_number/3,
 | |
| 		  varnumbers/2
 | |
|               ]).
 | |
| 
 | |
| /**
 | |
| * @defgroup varnumbers Variabilize term.
 | |
| * @ingroup ellllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll
 | |
| * 
 | |
| */
 | |
| 
 | |
| 
 | |
| numbervars(Term) :-
 | |
| 	numbervars(Term, 0, _).
 | |
| 
 | |
| max_var_number(V,Max,Max) :- var(V), !.
 | |
| max_var_number('$VAR'(I),Max0,Max) :- !,
 | |
| 	Max is max(I,Max0).
 | |
| max_var_number(S,Max0,Max) :-
 | |
| 	functor(S,_,Ar),
 | |
| 	max_var_numberl(0,Ar,S,Max0,Max).
 | |
| 
 | |
| max_var_numberl(I0,Ar,T,Max0,Max) :-
 | |
| 	( I0 =:= Ar ->
 | |
| 	    Max0 = Max
 | |
| 	;
 | |
| 	    I is I0+1,
 | |
| 	    arg(I,T,A),
 | |
| 	    max_var_number(A,Max0,MaxI),
 | |
| 	    max_var_numberl(I,Ar,T,MaxI,Max)
 | |
| 	).
 | |
| 
 | |
| varnumbers(GT, VT) :-
 | |
| 	unnumbervars(GT, VT).
 |