public Object visitPredicate(Predicate p, Object arg)
{
List<Term> newTerms = new List<Term>();
foreach (Term t in p.getTerms())
{
Term subsTerm = (Term)t.accept(this, arg);
newTerms.Add(subsTerm);
}
return new Predicate(p.getPredicateName(), newTerms);
}