blob: c047159696d1bf63b1d6771c57b1c14eeb392f5f (
plain) (
blame)
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
|
#include <u.h>
#include <libc.h>
#include "dat.h"
#include "fns.h"
Term *
copyterm(Term *orig, uvlong *clausenr)
{
Term *new = malloc(sizeof(Term));
memcpy(new, orig, sizeof(Term));
new->next = nil;
new->children = nil;
if(clausenr)
new->clausenr = *clausenr;
else
new->clausenr = orig->clausenr;
Term *child;
for(child = orig->children; child != nil; child = child->next)
new->children = appendterm(new->children, copyterm(child, clausenr));
return new;
}
Term *
appendterm(Term *a, Term *b)
{
if(a == nil)
return b;
Term *tmp;
for(tmp = a; tmp->next != nil; tmp = tmp->next);
tmp->next = b;
return a;
}
int
termslength(Term *list)
{
int len;
for(len = 0; list != nil; len++, list = list->next);
return len;
}
Term *
mkterm(int tag)
{
Term *t = malloc(sizeof(Term));
t->tag = tag;
t->next = nil;
t->children = nil;
t->text = nil;
t->clausenr = 0;
return t;
}
Term *
mkatom(Rune *name)
{
Term *t = mkterm(AtomTerm);
t->text = name;
return t;
}
Term *
mkvariable(Rune *name)
{
Term *t = mkterm(VariableTerm);
t->text = name;
return t;
}
Term *
mkcompound(Rune *name, int arity, Term *args)
{
Term *t = mkterm(CompoundTerm);
t->text = name;
t->arity = arity;
t->children = args;
return t;
}
Term *
mknumber(int type, vlong ival, double dval)
{
Term *t = mkterm(NumberTerm);
t->numbertype = type;
t->ival = ival;
t->dval = dval;
return t;
}
|