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.Fact
|
||||
import prolog.components.expressions.Predicate
|
||||
import prolog.components.terms.Functor
|
||||
import prolog.components.terms.Goal
|
||||
|
||||
/**
|
||||
* Prolog Program or database.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package prolog.components.expressions
|
||||
|
||||
import prolog.components.Goal
|
||||
import prolog.components.terms.Goal
|
||||
|
||||
interface Expression {
|
||||
fun evaluate(goal: Goal): Boolean
|
||||
|
|
|
@ -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].
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
|
|
Reference in a new issue