ref: 1ca3670047172610f0c284df5d5171fa840f97ce
dir: /dat.h/
typedef struct Term Term; typedef struct Binding Binding; typedef struct Goal Goal; typedef struct Choicepoint Choicepoint; typedef int (*Builtin)(Term *, Term *, Goal **, Choicepoint **, Binding **); struct Term { int tag; Rune *text; int arity; Term *next; Term *children; int numbertype; vlong ival; double dval; uvlong clausenr; }; struct Binding { Rune *name; uvlong nr; /* Unique number for each clause. Every time a clause is used, it gets a new number. */ Term *value; Binding *next; }; struct Goal { Term *goal; Goal *next; }; struct Choicepoint { Goal *goalstack; Term *retryclause; uvlong id; /* Unique number for each clause. Used to know where to cut to. */ Choicepoint *next; }; /* Sorted so that a lower value means it comes earlier in the standard ordering */ enum { VariableTerm, NumberTerm, StringTerm, AtomTerm, CompoundTerm, }; enum { NumberFloat, NumberInt, }; int debug; Term *initgoals;