/************************************************************************* * * * YAP Prolog * * * * Yap Prolog was developed at NCCUP - Universidade do Porto * * * * Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997 * * * ************************************************************************** * * * File: ground.pl * * Last rev: * * mods: * * comments: Variables and ground * * * *************************************************************************/ /* % grounds all free variables % as terms of the form '$VAR'(N) numbervars('$VAR'(M), M, N) :- !, succ(M, N). numbervars(Atomic, M, M) :- atomic(Atomic), !. numbervars(Term, M, N) :- functor(Term, _, Arity), '$numbervars'(0,Arity, Term, M, N). '$numbervars'(A, A, _, N, N) :- !. '$numbervars'(A,Arity, Term, M, N) :- '$succ'(A,An), arg(An, Term, Arg), numbervars(Arg, M, K), !, '$numbervars'(An, Arity, Term, K, N). ground(Term) :- nonvar(Term), % This term is not a variable, functor(Term, _, Arity), '$ground'(Arity, Term). % and none of its arguments are. '$ground'(0, _) :- !. '$ground'(N, Term) :- '$predc'(N,M), arg(N, Term, ArgN), ground(ArgN), '$ground'(M, Term). numbervars(Term, M, N) :- '$variables_in_term'(Term, [], L), '$numbermarked_vars'(L, M, N). '$numbermarked_vars'([], M, M). '$numbermarked_vars'([V|L], M, N) :- attvar(V), !, '$numbermarked_vars'(L, M, N). '$numbermarked_vars'(['$VAR'(M)|L], M, N) :- M1 is M+1, '$numbermarked_vars'(L, M1, N). */