refactor: Rework
This commit is contained in:
parent
ac55ed4c64
commit
6469dd6ced
34 changed files with 593 additions and 552 deletions
25
src/prolog/builtins/unificationOperators.kt
Normal file
25
src/prolog/builtins/unificationOperators.kt
Normal file
|
@ -0,0 +1,25 @@
|
|||
/**
|
||||
* Comparison and Unification of Terms
|
||||
*
|
||||
* [SWI Prolog Documentation](https://www.swi-prolog.org/pldoc/man?section=compare)
|
||||
*/
|
||||
package prolog.builtins
|
||||
|
||||
import prolog.Answers
|
||||
import prolog.Substitutions
|
||||
import prolog.ast.terms.Atom
|
||||
import prolog.ast.terms.Operator
|
||||
import prolog.ast.terms.Term
|
||||
import prolog.logic.applySubstitution
|
||||
import prolog.logic.equivalent
|
||||
|
||||
class Equivalent(private val term1: Term, private val term2: Term) : Operator(Atom("=="), term1, term2) {
|
||||
override fun satisfy(subs: Substitutions): Answers = sequence {
|
||||
val t1 = applySubstitution(term1, subs)
|
||||
val t2 = applySubstitution(term2, subs)
|
||||
|
||||
if (equivalent(t1, t2, subs)) {
|
||||
yield(Result.success(emptyMap()))
|
||||
}
|
||||
}
|
||||
}
|
Reference in a new issue