summaryrefslogtreecommitdiff
path: root/misc.c
diff options
context:
space:
mode:
Diffstat (limited to 'misc.c')
-rw-r--r--misc.c72
1 files changed, 72 insertions, 0 deletions
diff --git a/misc.c b/misc.c
new file mode 100644
index 0000000..dcd5e17
--- /dev/null
+++ b/misc.c
@@ -0,0 +1,72 @@
+#include <u.h>
+#include <libc.h>
+
+#include "dat.h"
+#include "fns.h"
+
+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;
+ 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;
+}