Added loose operators

This commit is contained in:
Tibo De Peuter 2025-05-09 16:50:20 +02:00
parent 717e5e0954
commit a9bb6e0338
Signed by: tdpeuter
GPG key ID: 38297DE43F75FFE2
6 changed files with 95 additions and 47 deletions

View file

@ -0,0 +1,57 @@
package prolog.builtins
import prolog.Answers
import prolog.Substitutions
import prolog.ast.terms.Atom
import prolog.ast.terms.Operator
import prolog.ast.terms.Term
import prolog.logic.applySubstitution
import prolog.logic.atomic
import prolog.logic.compound
import prolog.logic.nonvariable
import prolog.logic.variable
class Atomic(private val term: Term) : Operator(Atom("atomic"), null, term) {
override fun satisfy(subs: Substitutions): Answers {
if (atomic(term, subs)) {
return sequenceOf(Result.success(emptyMap()))
}
return emptySequence()
}
override fun applySubstitution(subs: Substitutions): Atomic = Atomic(applySubstitution(term, subs))
}
class Compound(private val term: Term) : Operator(Atom("compound"), null, term) {
override fun satisfy(subs: Substitutions): Answers {
if (compound(term, subs)) {
return sequenceOf(Result.success(emptyMap()))
}
return emptySequence()
}
override fun applySubstitution(subs: Substitutions): Compound = Compound(applySubstitution(term, subs))
}
class NonVar(private val term: Term) : Operator(Atom("nonvar"), null, term) {
override fun satisfy(subs: Substitutions): Answers {
if (nonvariable(term, subs)) {
return sequenceOf(Result.success(emptyMap()))
}
return emptySequence()
}
override fun applySubstitution(subs: Substitutions): NonVar = NonVar(applySubstitution(term, subs))
}
class Var(private val term: Term) : Operator(Atom("var"), null, term) {
override fun satisfy(subs: Substitutions): Answers {
if (variable(term, subs)) {
return sequenceOf(Result.success(emptyMap()))
}
return emptySequence()
}
override fun applySubstitution(subs: Substitutions): Var = Var(applySubstitution(term, subs))
}