public static void VisitTerm(Term term, GdlVisitor visitor) { visitor.VisitTerm(term); var constant = term as TermObject; if (constant != null) visitor.VisitConstant(constant); else if (term is TermVariable) visitor.VisitVariable((TermVariable) term); else if (term is TermFunction) VisitFunction((TermFunction) term, visitor); else throw new Exception("Unexpected Term type " + term.GetType()); }