Single clause queries

This commit is contained in:
Tibo De Peuter 2025-04-05 18:07:31 +02:00
parent da21d890fb
commit 438af6c053
Signed by: tdpeuter
GPG key ID: 38297DE43F75FFE2
10 changed files with 16 additions and 32 deletions

View file

@ -1,9 +0,0 @@
package prolog.components
import prolog.components.terms.Atom
data class Functor(val name: Atom, val arity: Int) {
override fun toString(): String {
return "${name.name}/${arity}"
}
}

View file

@ -4,6 +4,8 @@ import prolog.builtins.True
import prolog.components.expressions.Clause import prolog.components.expressions.Clause
import prolog.components.expressions.Fact import prolog.components.expressions.Fact
import prolog.components.expressions.Predicate import prolog.components.expressions.Predicate
import prolog.components.terms.Functor
import prolog.components.terms.Goal
/** /**
* Prolog Program or database. * Prolog Program or database.

View file

@ -1,7 +1,7 @@
package prolog.components.expressions package prolog.components.expressions
import prolog.components.Functor import prolog.components.terms.Functor
import prolog.components.Goal import prolog.components.terms.Goal
import prolog.components.terms.Head import prolog.components.terms.Head
import prolog.components.terms.Term import prolog.components.terms.Term
import prolog.unify import prolog.unify

View file

@ -1,6 +1,6 @@
package prolog.components.expressions package prolog.components.expressions
import prolog.components.Goal import prolog.components.terms.Goal
interface Expression { interface Expression {
fun evaluate(goal: Goal): Boolean fun evaluate(goal: Goal): Boolean

View file

@ -1,7 +1,7 @@
package prolog.components.expressions package prolog.components.expressions
import prolog.components.Functor import prolog.components.terms.Functor
import prolog.components.Goal import prolog.components.terms.Goal
/** /**
* Collection of [Clause]s with the same [Functor]. * Collection of [Clause]s with the same [Functor].

View file

@ -1,10 +1,7 @@
package prolog.components.terms package prolog.components.terms
import prolog.components.Functor open class Atom(val name: String): Goal() {
import prolog.components.Goal override val functor: Functor = "$name/_"
open class Atom(val name: String): Head(), Term, Goal {
override val functor: Functor = Functor(this, 0)
override fun toString(): String { override fun toString(): String {
return name return name

View file

@ -1,6 +1,6 @@
package prolog.components package prolog.components.terms
import prolog.components.terms.Term import prolog.components.Program
/** /**
* Question stated to the Prolog engine. * Question stated to the Prolog engine.
@ -9,9 +9,7 @@ import prolog.components.terms.Term
* A goal either [succeeds][prolog.builtins.True], in which case the variables in the compound terms have a binding, * A goal either [succeeds][prolog.builtins.True], in which case the variables in the compound terms have a binding,
* or it fails if Prolog fails to prove it. * or it fails if Prolog fails to prove it.
*/ */
interface Goal: Term { abstract class Goal : Head() {
val functor: Functor
fun prove(): Boolean { fun prove(): Boolean {
return Program.query(this) return Program.query(this)
} }

View file

@ -1,7 +1,5 @@
package prolog.components.terms package prolog.components.terms
import prolog.components.Functor
/** /**
* Part of a [Clause][prolog.components.expressions.Clause] before the [neck][prolog.terms.Neck] operator. * Part of a [Clause][prolog.components.expressions.Clause] before the [neck][prolog.terms.Neck] operator.
* *
@ -11,3 +9,5 @@ import prolog.components.Functor
abstract class Head: Term { abstract class Head: Term {
abstract val functor: Functor abstract val functor: Functor
} }
typealias Functor = String

View file

@ -1,10 +1,7 @@
package prolog.components.terms package prolog.components.terms
import prolog.components.Functor open class Structure(val name: Atom, val arguments: List<Argument>): Goal() {
import prolog.components.Goal override val functor: Functor = "${name.name}/${arguments.size}"
open class Structure(val name: Atom, val arguments: List<Argument>): Head(), Term, Goal {
override val functor: Functor = Functor(name, arguments.size)
override fun toString(): String { override fun toString(): String {
return when { return when {

View file

@ -3,7 +3,6 @@ package prolog
import prolog.builtins.atomic import prolog.builtins.atomic
import prolog.builtins.compound import prolog.builtins.compound
import prolog.builtins.variable import prolog.builtins.variable
import prolog.components.Goal
import prolog.components.terms.Term import prolog.components.terms.Term
import prolog.components.terms.Variable import prolog.components.terms.Variable
import prolog.components.terms.Structure import prolog.components.terms.Structure