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

commonMain.it.unibo.tuprolog.solve.classic.fsm.StateRuleExecution.kt Maven / Gradle / Ivy

Go to download

Stable, state-machine-based implementation of Prolog's SLDNF resolution principle

There is a newer version: 1.0.4
Show newest version
package it.unibo.tuprolog.solve.classic.fsm

import it.unibo.tuprolog.core.prepareForExecution
import it.unibo.tuprolog.solve.classic.ClassicExecutionContext
import it.unibo.tuprolog.utils.Cursor

data class StateRuleExecution(override val context: ClassicExecutionContext) : AbstractState(context) {
    private val failureState: StateBacktracking
        get() = StateBacktracking(context.copy(rules = Cursor.empty(), step = nextStep()))

    override fun computeNext(): State {
        val substitution = with(context) { unificator.mgu(currentGoal!!, rules.current!!.head) }
        return when {
            substitution.isSuccess -> {
                val newSubstitution = (context.substitution + substitution).castToUnifier()
                val subGoals = context.rules.current!!.prepareForExecution(newSubstitution).body[newSubstitution]

                StateGoalSelection(
                    context.copy(
                        goals = subGoals.toGoals(),
                        rules = Cursor.empty(),
                        substitution = newSubstitution,
                        step = nextStep(),
                    ),
                )
            }
            else -> failureState
        }
    }

    override fun clone(context: ClassicExecutionContext): StateRuleExecution = copy(context = context)
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy