-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTerm.h
102 lines (61 loc) · 2.26 KB
/
Term.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#ifndef TP_TERM_H
#define TP_TERM_H
#define MAX_VARS 100 /* maximum # of distinct variables in clause */
typedef short Symbol_type;
typedef unsigned char Arity_type;
typedef unsigned char Bits_type;
struct term {
Symbol_type symbol;
Arity_type arity;
Bits_type bits;
unsigned long fpa_id;
struct term **args;
struct clause *containing_clause;
};
typedef struct term *Term_ptr;
#define VARIABLE(t) ((t)->symbol >= 0)
#define CONSTANT(t) ((t)->symbol < 0 && (t)->arity == 0)
#define COMPLEX(t) ((t)->arity > 0)
/* Bits field of term.
* SCRATCH_BIT is set by several operations to temporarily mark terms.
* When using it, make sure that no other operation is using it, and
* make sure to clear it when done. */
#define SCRATCH_BIT 01
#define ORIENTED_BIT 02 /* oriented eq. atom (in pos. or neg. lit) */
#define NONBASIC_BIT 04 /* blocked "into" term for "basic" paramod */
#define DISABLED_BIT 010 /* term occurs in disabled clause */
#define SET_BIT(bits, flag) (bits = bits | flag)
#define CLEAR_BIT(bits, flag) (bits = bits & ~flag)
#define TP_BIT(bits, flag) (bits & flag)
/* function prototypes from term.c */
Term_ptr get_term(int arity);
void free_term(Term_ptr p);
void print_term_mem(FILE *fp, int heading);
void p_term_mem();
void zap_term(Term_ptr t);
int term_ident(Term_ptr t1, Term_ptr t2);
Term_ptr copy_term(Term_ptr t);
Term_ptr copy_term_bits(Term_ptr t);
int set_vars_term(Term_ptr t, char **varnames);
int set_vars(Term_ptr t);
int ground_term(Term_ptr t);
int biggest_variable(Term_ptr t);
int symbol_count(Term_ptr t);
int occurs_in(Term_ptr t1, Term_ptr t2);
Term_ptr build_binary_term(int sn, Term_ptr t1, Term_ptr t2);
void copy_nonbasic_marks(Term_ptr t1, Term_ptr t2);
void all_nonbasic(Term_ptr t);
void set_term_scratch(Term_ptr t);
void clear_term_scratch(Term_ptr t);
int term_scratch(Term_ptr t);
void set_term_oriented(Term_ptr t);
void clear_term_oriented(Term_ptr t);
int term_oriented(Term_ptr t);
void set_term_nonbasic(Term_ptr t);
void clear_term_nonbasic(Term_ptr t);
int term_nonbasic(Term_ptr t);
void set_term_disabled(Term_ptr t);
void clear_term_disabled(Term_ptr t);
int term_disabled(Term_ptr t);
void mark_term_disabled(Term_ptr t);
#endif /* ! TP_TERM_H */