static String encodeName(Term t) {
   return encodeName(t.getName());
 }
 /**
  * Returns {@code true} if the specified {@link Term} represent a conjunction, else {@code false}.
  *
  * <p>A {@link Term} is judged to represent a conjunction if is a structure with a functor of
  * {@link #CONJUNCTION_PREDICATE_NAME} and exactly two arguments.
  */
 public static boolean isConjunction(Term t) {
   // is relying on assumption that conjunctions are only, and always, represented by a comma
   return t.getType() == TermType.STRUCTURE
       && CONJUNCTION_PREDICATE_NAME.equals(t.getName())
       && t.getArgs().length == 2;
 }
 /**
  * Returns {@code true} if the specified {@link Term} represents a question or directive, else
  * {@code false}.
  *
  * <p>A {@link Term} is judged to represent a question if it is a structure a single argument and
  * with a functor {@link #QUESTION_PREDICATE_NAME} or {@link #IMPLICATION_PREDICATE_NAME}.
  */
 public static boolean isQuestionOrDirectiveFunctionCall(Term t) {
   return t.getType() == TermType.STRUCTURE
       && t.getNumberOfArguments() == 1
       && (QUESTION_PREDICATE_NAME.equals(t.getName())
           || IMPLICATION_PREDICATE_NAME.equals(t.getName()));
 }
 /**
  * Returns {@code true} if the specified {@link Term} represent a {@code dynamic} function call,
  * else {@code false}.
  *
  * <p>A {@link Term} is judged to represent a dynamic function call (i.e. a request to mark a user
  * defined predicate as "dynamic") if it is a structure with a functor of {@code dynamic} and a
  * single argument.
  */
 public static boolean isDynamicFunctionCall(Term t) {
   return "dynamic".equals(t.getName()) && t.getNumberOfArguments() == 1;
 }