Interface Term

All Known Subinterfaces:
Numeric
All Known Implementing Classes:
Atom, DecimalFraction, EmptyList, IntegerNumber, List, Variable

public interface Term
The building blocks used to construct Prolog programs and queries.

Class diagram

  • Method Details

    • getName

      String getName()
      Returns a string representation of this term.

      Exact value returned will vary by TermType.

      Returns:
      a string representation of this term
    • getNumberOfArguments

      int getNumberOfArguments()
      Returns the number of arguments in this term.
      Returns:
      number of arguments in this term
    • firstArgument

      default Term firstArgument()
    • secondArgument

      default Term secondArgument()
    • thirdArgument

      default Term thirdArgument()
    • fourthArgument

      default Term fourthArgument()
    • getArgument

      Term getArgument(int index)
      Returns the term at the specified position in this term's arguments.
      Parameters:
      index - index of the argument to return
      Returns:
      the term at the specified position in this term's arguments
      Throws:
      ArrayIndexOutOfBoundsException - if the index is out of range (index < 0 || index >= getNumberOfArguments())
    • getType

      TermType getType()
      Returns the TermType represented by this term.
      Returns:
      the TermType this term represents
    • copy

      Term copy(Map<Variable,Term> sharedVariables)
      Returns a copy of this term.

      The returned copy will share any immutable terms contained in this term. The returned copy will contain new instances for any Variables contained in this term. The sharedVariables parameter keeps track of which Variables have already been copied.

      Parameters:
      sharedVariables - keeps track of which Variables have already been copied (key = original version, value = version used in copy)
      Returns:
      a copy of this term
    • copy

      default Term copy()
    • getBound

      default Term getBound()
      Returns the term this object is bound to.

      For anything other than a Variable this method will return this. TODO think of a better name and explanation.

    • getTerm

      Term getTerm()
      Returns the current instantiated state of this term.

      Returns a representation of this term with all instantiated Variables replaced with the terms they are instantiated with.

      Returns:
      a representation of this term with all instantiated Variables replaced with the terms they are instantiated with.
    • unify

      boolean unify(Term t)
      Attempts to unify this term to the specified term.

      The rules for deciding if two terms are unifiable are as follows:

      • An uninstantiated Variable will unify with any term. As a result the Variable will become instantiated to the other term. The instantiaton will be undone when backtrack() is next called on the Variable
      • Non-variable terms will unify with other terms that are of the same TermType and have the same value. The exact meaning of "having the same value" will vary between term types but will include that the two terms being unified have the same number of arguments and that all of their corresponding arguments unify.
      Note: can leave things in "half-state" on failure as neither List or Predicate backtrack earlier args.
      Parameters:
      t - the term to unify this term against
      Returns:
      true if the attempt to unify this term to the given term was successful
      See Also:
    • backtrack

      void backtrack()
      Reverts this term back to its original state prior to any unifications.

      Makes all Variables that this term consists of uninstantiated.

      See Also:
    • isImmutable

      boolean isImmutable()
      Returns true is this term is immutable.

      A term is considered immutable if its value will never change as a result of executing its unify(Term) or backtrack() methods. A term will not be considered immutable if it is a Variable or any of its arguments are not immutable.

      Returns:
      true is this term is immutable