commonMain.it.unibo.tuprolog.solve.primitive.ArithmeticRelation.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of solve-jvm Show documentation
Show all versions of solve-jvm Show documentation
Resolution-agnostic API for logic solvers
package it.unibo.tuprolog.solve.primitive
import it.unibo.tuprolog.core.Numeric
import it.unibo.tuprolog.core.Term
import it.unibo.tuprolog.solve.ExecutionContext
import it.unibo.tuprolog.solve.function.evalAsArithmeticExpression
/** Base class for implementing arithmetic relation between [Numeric] terms */
abstract class ArithmeticRelation(operator: String) : BinaryRelation.Predicative(operator) {
final override fun Solve.Request.compute(
first: Term,
second: Term,
): Boolean {
ensuringAllArgumentsAreInstantiated()
return evaluateAndCompute(first, second)
}
private fun Solve.Request.evaluateAndCompute(
x: Term,
y: Term,
): Boolean = computeNumeric(x.evalAsArithmeticExpression(this, 0), y.evalAsArithmeticExpression(this, 1))
abstract fun computeNumeric(
x: Numeric,
y: Numeric,
): Boolean
}