All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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