EndState

interface EndState : State

A terminal State for one branch of the search tree: it carries the Solution that branch produced (StateEnd for a successful/failed one, StateHalt for one aborted by an uncaught exception) and has no successors.

Reaching an EndState is what triggers publishing solution onto the resolution's shared solution channel (see it.unibo.tuprolog.solve.concurrent.ConcurrentResolutionHandle.publishSolutionAndTerminateResolutionIfNeed); every other branch of the tree keeps running independently until it, too, reaches its own EndState.

Inheritors

Properties

Link copied to clipboard

The execution context this state operates on.

Link copied to clipboard
open override val isEndState: Boolean

Whether this state is a terminal one for the current branch, i.e. an EndState.

Link copied to clipboard
abstract val solution: Solution

The Solution produced by this branch of the search tree.

Functions

Link copied to clipboard
open override fun asEndState(): EndState

This state as an EndState, or null if isEndState is false.

Link copied to clipboard

This state as an EndState.

Link copied to clipboard
abstract fun clone(context: ConcurrentExecutionContext = this.context): State

Returns a copy of this state, replacing context with the given one (defaulting to the current context).

Link copied to clipboard
open override fun next(): Iterable<State>

Computes every state this branch may transition into from here, one per alternative (matching clause, disjunct, primitive solution, ...) available at this point; empty only for EndStates. Each element is meant to be explored independently (and, in :solve-concurrent's solver, concurrently) of the others.