commonMain.it.unibo.tuprolog.solve.primitive.ArithmeticRelation.kt Maven / Gradle / Ivy
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
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy