Package net.hydromatic.morel.util
Class Unifier
java.lang.Object
net.hydromatic.morel.util.Unifier
- Direct Known Subclasses:
MartelliUnifier,RobinsonUnifier
Given pairs of terms, finds a substitution to minimize those pairs of
terms.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic interfaceCalled by the unifier when a Term's type becomes known.private static classControl flow exception, thrown byUnifier.Term.checkCycle(Map, Map)if it finds a cycle in a substitution map.static classResult indicating that unification was not possible.static interfaceResult of attempting unification.static final classA sequence of terms.static classMap from variables to terms.static final classThe results of a successful unification.static interfaceTerm (variable, symbol or node).static final classA pair of terms.static interfaceVisitor for terms.static interfaceCalled on various events during unification.static final classA variable that represents a symbol or a sequence; unification's task is to find the substitutions for such variables. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final Map<String, Unifier.Sequence> private final Map<String, Unifier.Sequence> private final Map<String, Unifier.Variable> private int -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionapply(String operator, Iterable<? extends Unifier.Term> args) Creates a sequence, or returns an existing one with the same terms.apply(String operator, Unifier.Term... args) Creates a sequence, or returns an existing one with the same terms.Creates an atom, or returns an existing one with the same name.private static voidcheckCycles(Map<Unifier.Variable, Unifier.Term> map, Map<Unifier.Variable, Unifier.Variable> active) protected Unifier.Failurebooleanoccurs()Whether this unifier checks for cycles in substitutions.(package private) static Unifier.SequencesequenceApply(String operator, Map<Unifier.Variable, Unifier.Term> substitutions, Iterable<Unifier.Term> terms) substitution(Unifier.Term... varTerms) Creates a substitution.abstract Unifier.Resultunify(List<Unifier.TermTerm> termPairs, Map<Unifier.Variable, Unifier.Action> termActions, Unifier.Tracer tracer) variable()Creates a new variable, with a new name.variable(int ordinal) Creates a variable, or returns an existing one with the same ordinal.Creates a variable, or returns an existing one with the same name.
-
Field Details
-
varId
private int varId -
variableMap
-
atomMap
-
sequenceMap
-
-
Constructor Details
-
Unifier
public Unifier()
-
-
Method Details
-
occurs
public boolean occurs()Whether this unifier checks for cycles in substitutions. -
apply
Creates a sequence, or returns an existing one with the same terms. -
apply
Creates a sequence, or returns an existing one with the same terms. -
variable
Creates a variable, or returns an existing one with the same name. -
variable
Creates a variable, or returns an existing one with the same ordinal. -
variable
Creates a new variable, with a new name. -
atom
Creates an atom, or returns an existing one with the same name. -
substitution
Creates a substitution.The arguments are alternating variable / term pairs. For example,
substitution(a, x, b, y)becomes [a/X, b/Y]. -
sequenceApply
static Unifier.Sequence sequenceApply(String operator, Map<Unifier.Variable, Unifier.Term> substitutions, Iterable<Unifier.Term> terms) -
unify
@Nonnull public abstract Unifier.Result unify(List<Unifier.TermTerm> termPairs, Map<Unifier.Variable, Unifier.Action> termActions, Unifier.Tracer tracer) -
checkCycles
private static void checkCycles(Map<Unifier.Variable, Unifier.Term> map, Map<Unifier.Variable, throws Unifier.CycleExceptionUnifier.Variable> active) - Throws:
Unifier.CycleException
-
failure
-