Class Structure

java.lang.Object
org.projog.core.term.Structure
All Implemented Interfaces:
Term

public final class Structure extends Object implements Term
A Term consisting of a functor (name) and a number of other Term arguments.

Also known as a "compound term".

  • Field Details

    • functor

      private final String functor
    • args

      private final Term[] args
    • immutable

      private final boolean immutable
    • hashCode

      private final int hashCode
  • Constructor Details

    • Structure

      private Structure(String functor, Term[] args, boolean immutable)
      Private constructor to force use of createStructure(String, Term[])
      Parameters:
      immutable - is this structure immutable (i.e. are all its arguments known to be immutable)?
  • Method Details

    • createStructure

      public static Term createStructure(String functor, Term[] args)
      Factory method for creating Structure instances.

      The reason that Structures have to be created via a factory method, rather than a constructor, is to enforce:

      • structures with the functor . and two arguments are created as instances of List
      • no structures can be created without any arguments
      Parameters:
      functor - the name of the new term
      args - arguments for the new term
      Returns:
      either a new Structure or a new List
    • isImmutable

      private static boolean isImmutable(Term[] args)
    • getName

      public String getName()
      Returns the functor of this structure.
      Specified by:
      getName in interface Term
      Returns:
      the functor of this structure
    • getArgs

      public Term[] getArgs()
      Description copied from interface: Term
      Returns an array of this terms's arguments.

      Note: for performance reasons the array returned is the same array used internally be the term instance so be careful not to alter the array returned as changes will be reflected in the original term.

      Specified by:
      getArgs in interface Term
      Returns:
      array of this terms's arguments
      See Also:
    • getNumberOfArguments

      public int getNumberOfArguments()
      Description copied from interface: Term
      Returns the number of arguments in this term.
      Specified by:
      getNumberOfArguments in interface Term
      Returns:
      number of arguments in this term
    • getArgument

      public Term getArgument(int index)
      Description copied from interface: Term
      Returns the term at the specified position in this term's arguments.
      Specified by:
      getArgument in interface Term
      Parameters:
      index - index of the argument to return
      Returns:
      the term at the specified position in this term's arguments
    • getType

      public TermType getType()
      Specified by:
      getType in interface Term
      Returns:
      TermType.STRUCTURE
    • isImmutable

      public boolean isImmutable()
      Description copied from interface: Term
      Returns true is this term is immutable.

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

      Specified by:
      isImmutable in interface Term
      Returns:
      true is this term is immutable
    • getTerm

      public Structure getTerm()
      Description copied from interface: Term
      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.

      Specified by:
      getTerm in interface Term
      Returns:
      a representation of this term with all instantiated Variables replaced with the terms they are instantiated with.
    • copy

      public Structure copy(Map<Variable,Variable> sharedVariables)
      Description copied from interface: Term
      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.

      Specified by:
      copy in interface Term
      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
    • unify

      public boolean unify(Term t)
      Description copied from interface: Term
      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 Term.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.
      Specified by:
      unify in interface Term
      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

      public void backtrack()
      Description copied from interface: Term
      Reverts this term back to its original state prior to any unifications.

      Makes all Variables that this term consists of uninstantiated.

      Specified by:
      backtrack in interface Term
      See Also:
    • equals

      public boolean equals(Object o)
      Overrides:
      equals in class Object
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • toString

      public String toString()
      Returns a String representation of this term.

      The value returned will consist of the structure's functor followed be a comma separated list of its arguments enclosed in brackets.

      Example: functor(arg1, arg2, arg3)

      Overrides:
      toString in class Object