From 7a82e1b59b4b18d88787c86b9daa78bcd0750b23 Mon Sep 17 00:00:00 2001 From: vsc Date: Wed, 27 Dec 2006 12:26:33 +0000 Subject: [PATCH] Varnumbers predicate (originally in QP) git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1741 b08c6af1-5177-4d33-ba66-4b1c6b8b522a --- library/varnumbers.yap | 60 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 library/varnumbers.yap diff --git a/library/varnumbers.yap b/library/varnumbers.yap new file mode 100644 index 000000000..32a18b270 --- /dev/null +++ b/library/varnumbers.yap @@ -0,0 +1,60 @@ +% File : varnumbers.yap +% Author : Vitor Santos Costa +% Updated: 2006 +% Purpose: opposite to numbervars + +:- module(varnumbers, [ + numbervars/1, + max_var_number/3, + varnumbers/2 + ]). + + +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) :- + max_var_number(GT,0,Max), + Max1 is Max+1, + functor(Vars,vars,Max1), + varnumbers(GT, Vars, VT). + +varnumbers(V,_,V) :- var(V), !. +varnumbers('$VAR'(I),Vs,V) :- !, + I1 is I+1, + arg(I1,Vs,V). +varnumbers(S,Vs,NS) :- + functor(S,N,Ar), + functor(NS,N,Ar), + varnumbersl(0,Ar,Vs,S,NS). + +varnumbersl(I0,Ar,Vs,S,NS) :- + (I0 =:= Ar -> + true + ; + I is I0+1, + arg(I,S,A), + arg(I,NS,NA), + varnumbers(A,Vs,NA), + varnumbersl(I,Ar,Vs,S,NS) + ). + + +