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

There is a newer version: 1.0.4
Show newest version
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 - 2024 Weber Informatics LLC | Privacy Policy