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.Fact
import prolog.components.expressions.Predicate
import prolog.components.terms.Functor
import prolog.components.terms.Goal
/**
* Prolog Program or database.

View file

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

View file

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

View file

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

View file

@ -1,10 +1,7 @@
package prolog.components.terms
import prolog.components.Functor
import prolog.components.Goal
open class Atom(val name: String): Head(), Term, Goal {
override val functor: Functor = Functor(this, 0)
open class Atom(val name: String): Goal() {
override val functor: Functor = "$name/_"
override fun toString(): String {
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.
@ -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,
* or it fails if Prolog fails to prove it.
*/
interface Goal: Term {
val functor: Functor
abstract class Goal : Head() {
fun prove(): Boolean {
return Program.query(this)
}

View file

@ -1,7 +1,5 @@
package prolog.components.terms
import prolog.components.Functor
/**
* 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 val functor: Functor
}
typealias Functor = String

View file

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

View file

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