root/tags/lgt2210/library/term.lgt

Revision 365, 2.0 KB (checked in by pmoura, 6 years ago)

Changed "authors" key in info/1 directive to "author".

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1
2:- object(term,
3    implements(termp)).
4
5
6    :- info([
7        version is 1.0,
8        author is 'Paulo Moura',
9        date is 2000/7/24,
10        comment is 'Prolog term predicates.']).
11
12
13    ground(Term) :-
14        nonvar(Term),
15        functor(Term, _, Arity),
16        ground(Arity, Term).
17
18
19    ground(0, _) :-
20        !.
21
22    ground(N, Term) :-
23        N > 0,
24        arg(N, Term, Arg),
25        ground(Arg),
26        N2 is N - 1,
27        ground(N2, Term).
28
29
30    occurs(Var, Term) :-
31        var(Term) ->
32            Var == Term
33            ;
34            functor(Term, _, Arity),
35            occurs(Arity, Var, Term).
36
37
38    occurs(N, Var, Term) :-
39        compound(Term),
40        arg(N, Term, Arg),
41        occurs(Var, Arg),
42        !.
43
44    occurs(N, Var, Term) :-
45        N > 1,
46        N2 is N - 1,
47        occurs(N2, Var, Term).
48
49
50    subsumes(General, Specific) :-
51        vars(Specific, Vars),
52        subsumes(General, Specific, Vars).
53
54
55    subsumes(General, Specific, Vars) :-
56        var(General),
57        !,
58        (var_member_chk(General, Vars) ->
59            General == Specific
60            ;
61            General = Specific).
62
63    subsumes(General, Specific, Vars) :-
64        nonvar(Specific),
65        functor(General, Functor, Arity),
66        functor(Specific, Functor, Arity),
67        subsumes(Arity, General, Specific, Vars).
68
69
70    subsumes(0, _, _, _) :- !.
71
72    subsumes(N, General, Specific, Vars) :-
73        arg(N, GeneralGenArg),
74        arg(N, Specific, SpeArg),
75        subsumes(GenArg, SpeArg, Vars),
76        M is N-1, !,
77        subsumes(M, General, Specific, Vars).
78
79
80    var_member_chk(Var, [Head| Tail]) :-
81        Var == Head ->
82            true
83            ;
84            var_member_chk(Var, Tail).
85
86
87    subterm(Term, Term).
88
89    subterm(Sub, Term) :-
90        nonvar(Term),
91        functor(Term, _, N),
92        subterm(N, Sub, Term).
93
94
95    subterm(N, Sub, Term) :-
96        compound(Term),
97        arg(N, Term, Arg),
98        subterm(Sub, Arg).
99
100    subterm(N, Sub, Term) :-
101        N > 1,
102        M is N-1,
103        subterm(M, Sub, Term).
104
105
106    valid(_).
107
108
109    vars(Term, Vars) :-
110        vars(Term, [], Vars).
111
112
113    vars(Term, Acc, Vars) :-
114        var(Term) ->
115            (var_member_chk(Term, Acc) ->
116                Vars = Acc
117                ;
118                Vars = [Term| Acc])
119            ;
120            Term =.. [_| Args],
121            var_list(Args, Acc, Vars).
122
123
124    var_list([], Vars, Vars).
125
126    var_list([Term| Terms], Acc, Vars) :-
127        vars(Term, Acc, Acc2),
128        var_list(Terms, Acc2, Vars).
129
130
131:- end_object.
Note: See TracBrowser for help on using the browser.