@startuml Term.png
hide members

interface Term {
+getName()
+getArgs()
+getNumberOfArguments()
+getArgument(int)
+getType()
+copy(Map<Variable, Variable>)
+getBound()
+getTerm()
+unify(Term)
+backtrack()
+isImmutable()
}

interface Numeric {
+getDouble()
+getLong()
}

Term <|-up- Atom
Term <|-- EmptyList
Term <|-- List
Term <|-down- Structure
Term <|-left- Variable
Term <|-right- Numeric
Numeric <|-up- DecimalFraction
Numeric <|-down- IntegerNumber
Structure o-- Term
List o-- Term
Variable o-- Term

show Term method
show Numeric method
@enduml
