YAP 7.1.0
ground.yap
Go to the documentation of this file.
1/*************************************************************************
2* *
3* YAP Prolog *
4* *
5* Yap Prolog was developed at NCCUP - Universidade do Porto *
6* *
7* Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997 *
8* *
9**************************************************************************
10* *
11* File: ground.pl *
12* Last rev: *
13* mods: *
14* comments: Variables and ground *
15* *
16*************************************************************************/
17
18/**
19 * @file ground.yap
20 * @author VITOR SANTOS COSTA <vsc@VITORs-MBP-2.lan>
21 * @date Thu Oct 19 12:01:27 2017
22 *
23 * @brief term operations
24 *
25 * @addtogroup YAPTypes
26 *
27 *
28*/
29/*
30% grounds all free variables
31% as terms of the form '$VAR'(N)
32
33numbervars('$VAR'(M), M, N) :- !,
34 succ(M, N).
35numbervars(Atomic, M, M) :-
36 atomic(Atomic), !.
37numbervars(Term, M, N) :-
38 functor(Term, _, Arity),
39 '$numbervars'(0,Arity, Term, M, N).
40
41'$numbervars'(A, A, _, N, N) :- !.
42'$numbervars'(A,Arity, Term, M, N) :-
43 '$succ'(A,An),
44 arg(An, Term, Arg),
45 numbervars(Arg, M, K), !,
46 '$numbervars'(An, Arity, Term, K, N).
47
48
49ground(Term) :-
50 nonvar(Term), % This term is not a variable,
51 functor(Term, _, Arity),
52 '$ground'(Arity, Term). % and none of its arguments are.
53
54'$ground'(0, _) :- !.
55'$ground'(N, Term) :-
56 '$predc'(N,M),
57 arg(N, Term, ArgN),
58 ground(ArgN),
59 '$ground'(M, Term).
60
61numbervars(Term, M, N) :-
62 '$variables_in_term'(Term, [], L),
63 '$numbermarked_vars'(L, M, N).
64
65'$numbermarked_vars'([], M, M).
66'$numbermarked_vars'([V|L], M, N) :-
67 attvar(V), !,
68 '$numbermarked_vars'(L, M, N).
69'$numbermarked_vars'(['$VAR'(M)|L], M, N) :-
70 M1 is M+1,
71 '$numbermarked_vars'(L, M1, N).
72
73*/
74
75