Checkpoint
This commit is contained in:
parent
3724ac72f9
commit
7daae860fc
8 changed files with 119 additions and 9 deletions
|
@ -22,7 +22,7 @@ class Unify(private val term1: Term, private val term2: Term): Operator(Atom("="
|
|||
val t1 = applySubstitution(term1, subs)
|
||||
val t2 = applySubstitution(term2, subs)
|
||||
|
||||
yieldAll(unifyLazy(t1, t2, subs))
|
||||
yieldAll(unifyLazy(t1, t2, emptyMap()))
|
||||
}
|
||||
|
||||
override fun applySubstitution(subs: Substitutions): Unify = Unify(
|
||||
|
@ -45,7 +45,7 @@ class Equivalent(private val term1: Term, private val term2: Term) : Operator(At
|
|||
val t1 = applySubstitution(term1, subs)
|
||||
val t2 = applySubstitution(term2, subs)
|
||||
|
||||
if (equivalent(t1, t2, subs)) {
|
||||
if (equivalent(t1, t2, emptyMap())) {
|
||||
yield(Result.success(emptyMap()))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -85,6 +85,7 @@ fun unifyLazy(term1: Term, term2: Term, subs: Substitutions): Answers = sequence
|
|||
val args1 = structure1.arguments
|
||||
val args2 = structure2.arguments
|
||||
if (args1.size == args2.size) {
|
||||
// Keep track of the substitutions so far
|
||||
val results = args1.zip(args2).map { (arg1, arg2) ->
|
||||
unifyLazy(arg1, arg2, subs)
|
||||
}
|
||||
|
@ -145,7 +146,11 @@ fun unify(term1: Term, term2: Term): Answer {
|
|||
fun equivalent(term1: Term, term2: Term, subs: Substitutions): Boolean {
|
||||
return when {
|
||||
term1 is Atom && term2 is Atom -> compare(term1, term2, subs) == 0
|
||||
term1 is Structure && term2 is Structure -> compare(term1, term2, subs) == 0
|
||||
term1 is Structure && term2 is Structure -> {
|
||||
term1.functor == term2.functor && term1.arguments.zip(term2.arguments).all { (arg1, arg2) ->
|
||||
equivalent(arg1, arg2, subs)
|
||||
}
|
||||
}
|
||||
term1 is Integer && term2 is Integer -> compare(term1, term2, subs) == 0
|
||||
term1 is Number && term2 is Number -> compare(term1, term2, subs) == 0
|
||||
term1 is Variable && term2 is Variable -> term1 == term2
|
||||
|
|
Reference in a new issue