/** * @file varnumbers.yap * @author VITOR SANTOS COSTA * @date 2006 * * @brief opposite to numbervars * * */ :- module(varnumbers, [ numbervars/1, max_var_number/3, varnumbers/2 ]). /** * @defgroup varnumbers Variabilize term. * @ingroup library * */ 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).