tree = ^ node; SyntaxClass = ( constant, intcon, variable, func, predicate, negate, rule, progrm, list ); node = record case tag :SyntaxClass of constant :( cid :alfa ); { eg. fred } intcon :( n:integer ); { eg. 99 } variable :( vid :alfa; index :integer ); { eg. X } func, predicate :( id :alfa; params:tree ); { eg. h(1,k(p,X)) } negate :( l :tree ); { eg. not p(7) } rule :( lhs, rhs :tree ); { eg. p <= q and r. } progrm :( facts, query :tree ); list :( hd, tl :tree ) end; {\fB Syntactic Types. \fP}