LogicProgrammingScopeWithUnification

Adds unification-related DSL sugar to LogicProgrammingScopeWithUnificator: every Unificator operation gets an overload accepting plain Any operands (auto-toTerm-ed, exactly like the rest of the :dsl-core DSL), plus infix aliases mirroring it.unibo.tuprolog.unify.Unificator.Companion's own Term-only infix functions (it.unibo.tuprolog.unify.Unificator.Companion.mguWith, it.unibo.tuprolog.unify.Unificator.Companion.matches, it.unibo.tuprolog.unify.Unificator.Companion.unifyWith) but resolved against this scope's unificator instead of always Unificator.default:

logicProgramming {
val x = varOf("X")
x matches "a" // true -- equivalent to unificator.match(x, atomOf("a"))
val substitution = x mguWith "a" // {X = a}, an [Substitution.Unifier]
x unifyWith "a" // a, the [Term] resulting from applying the mgu to `x`
}

All three infix functions, as well as the Any-accepting mgu/match/unify overloads, perform unification with occurs-check enabled; call mgu/match/unify directly (optionally passing occurCheckEnabled = false) for finer control.

Type Parameters

S

the concrete, self-referential scope type (see it.unibo.tuprolog.dsl.BaseLogicProgrammingScope).

Inheritors

Properties

Link copied to clipboard
open val _: Var
Link copied to clipboard
abstract val context: Substitution
Link copied to clipboard
abstract val emptyBlock: EmptyBlock
Link copied to clipboard
Link copied to clipboard
abstract val fail: Truth
Link copied to clipboard
Link copied to clipboard
abstract val unificator: Unificator
Link copied to clipboard
abstract val variables: Map<String, Var>

Functions

Link copied to clipboard
abstract fun anonymous(): Var
Link copied to clipboard
abstract fun atomOf(value: Char): Atom
abstract fun atomOf(value: String): Atom
Link copied to clipboard
abstract fun blockOf(terms: Iterable<Term>): Block
abstract fun blockOf(terms: Sequence<Term>): Block
abstract fun blockOf(vararg terms: Term): Block
Link copied to clipboard
abstract fun clauseOf(head: Struct?, vararg body: Term): Clause
Link copied to clipboard
abstract fun consOf(head: Term, tail: Term): Cons
Link copied to clipboard
abstract operator fun contains(variable: Var): Boolean
abstract operator fun contains(variable: String): Boolean
Link copied to clipboard
abstract fun copy(unificator: Unificator): S

Creates a copy of this scope, backed by the same it.unibo.tuprolog.core.Scope, using unificator instead of the current one.

Link copied to clipboard
abstract fun directiveOf(body1: Term, vararg body: Term): Directive
Link copied to clipboard
abstract fun factOf(head: Struct): Fact
Link copied to clipboard
abstract operator fun get(variable: String): Var?
Link copied to clipboard
abstract fun indicatorOf(name: Term, arity: Term): Indicator
abstract fun indicatorOf(name: String, arity: Int): Indicator
Link copied to clipboard
abstract fun intOf(value: Byte): Integer
abstract fun intOf(value: Int): Integer
abstract fun intOf(value: Long): Integer
abstract fun intOf(value: Short): Integer
abstract fun intOf(value: String): Integer
abstract fun intOf(value: BigInteger): Integer
abstract fun intOf(value: String, radix: Int): Integer
Link copied to clipboard
abstract fun logicListFrom(terms: Iterable<Term>, last: Term?): List
abstract fun logicListFrom(terms: Sequence<Term>, last: Term?): List
abstract fun logicListFrom(vararg terms: Term, last: Term?): List
Link copied to clipboard
abstract fun logicListOf(terms: Iterable<Term>): List
abstract fun logicListOf(terms: Sequence<Term>): List
abstract fun logicListOf(vararg terms: Term): List
Link copied to clipboard
open fun match(term1: Any, term2: Any, occurCheckEnabled: Boolean = true): Boolean

Overload of Unificator.match accepting plain values instead of Terms: term1 and term2 are auto-toTerm-ed before delegating to this scope's unificator.

open fun match(term1: Term, term2: Term): Boolean
open fun match(term1: Term, term2: Term, occurCheckEnabled: Boolean): Boolean
Link copied to clipboard
open infix fun Any.matches(other: Any): Boolean

Infix alias of match for Any operands: tells whether this and other (both auto-toTerm-ed) unify, with occurs-check enabled, using this scope's unificator.

Link copied to clipboard
open fun merge(substitution1: Substitution, substitution2: Substitution): Substitution
abstract fun merge(substitution1: Substitution, substitution2: Substitution, occurCheckEnabled: Boolean): Substitution
Link copied to clipboard
open fun mgu(term1: Any, term2: Any, occurCheckEnabled: Boolean = true): Substitution

Overload of Unificator.mgu accepting plain values instead of Terms: term1 and term2 are auto-toTerm-ed before delegating to this scope's unificator, so e.g. raw Strings, numbers or already-built Terms can be mixed freely.

open fun mgu(term1: Term, term2: Term): Substitution
abstract fun mgu(term1: Term, term2: Term, occurCheckEnabled: Boolean): Substitution
Link copied to clipboard
open infix fun Any.mguWith(other: Any): Substitution

Infix alias of mgu for Any operands: computes the Most General Unifier of this and other (both auto-toTerm-ed), with occurs-check enabled, using this scope's unificator.

Link copied to clipboard
abstract fun newScope(): S
Link copied to clipboard
abstract fun numOf(value: Byte): Integer
abstract fun numOf(value: Double): Real
abstract fun numOf(value: Float): Real
abstract fun numOf(value: Int): Integer
abstract fun numOf(value: Long): Integer
abstract fun numOf(value: Number): Numeric
abstract fun numOf(value: Short): Integer
abstract fun numOf(value: String): Numeric
abstract fun numOf(value: BigDecimal): Real
abstract fun numOf(value: BigInteger): Integer
Link copied to clipboard
abstract fun realOf(value: Double): Real
abstract fun realOf(value: Float): Real
abstract fun realOf(value: String): Real
abstract fun realOf(value: BigDecimal): Real
Link copied to clipboard
abstract fun ruleOf(head: Struct, body1: Term, vararg body: Term): Rule
Link copied to clipboard
abstract fun structOf(functor: String, args: Iterable<Term>): Struct
abstract fun structOf(functor: String, args: List<Term>): Struct
abstract fun structOf(functor: String, args: Sequence<Term>): Struct
abstract fun structOf(functor: String, vararg args: Term): Struct
Link copied to clipboard
abstract fun substitutionOf(assignments: Iterable<Pair<Var, Term>>): Substitution
abstract fun substitutionOf(assignments: Sequence<Pair<Var, Term>>): Substitution
abstract fun substitutionOf(vararg assignments: Pair<String, Term>): Substitution
Link copied to clipboard
open fun <T : Term> Any.toSpecificSubTypeOfTerm(type: KClass<T>, converter: (Struct) -> T): T
Link copied to clipboard
open fun Any.toTerm(): Term
Link copied to clipboard
abstract fun truthOf(value: Boolean): Truth
Link copied to clipboard
abstract fun tupleOf(terms: Iterable<Term>): Tuple
abstract fun tupleOf(terms: Sequence<Term>): Tuple
abstract fun tupleOf(vararg terms: Term): Tuple
Link copied to clipboard
abstract fun unifierOf(assignments: Iterable<Pair<Var, Term>>): Substitution.Unifier
abstract fun unifierOf(assignments: Sequence<Pair<Var, Term>>): Substitution.Unifier
abstract fun unifierOf(vararg assignments: Pair<String, Term>): Substitution.Unifier
Link copied to clipboard
open fun unify(term1: Any, term2: Any, occurCheckEnabled: Boolean = true): Term?

Overload of Unificator.unify accepting plain values instead of Terms: term1 and term2 are auto-toTerm-ed before delegating to this scope's unificator.

open fun unify(term1: Term, term2: Term): Term?
open fun unify(term1: Term, term2: Term, occurCheckEnabled: Boolean): Term?
Link copied to clipboard
open infix fun Any.unifyWith(other: Any): Term?

Infix alias of unify for Any operands: unifies this and other (both auto-toTerm-ed), with occurs-check enabled, using this scope's unificator.

Link copied to clipboard
abstract fun varOf(name: Char): Var
abstract fun varOf(name: String): Var
Link copied to clipboard
abstract fun whatever(): Var
Link copied to clipboard
abstract fun where(lambda: Scope.() -> Unit): Scope
Link copied to clipboard
abstract fun <R> with(lambda: Scope.() -> R): R