Single clause queries
This commit is contained in:
parent
da21d890fb
commit
438af6c053
10 changed files with 16 additions and 32 deletions
|
@ -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}"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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.
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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].
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
|
@ -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
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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
|
||||||
|
|
Reference in a new issue