Checkpoint
This commit is contained in:
parent
23b2ce9362
commit
f9017da734
18 changed files with 814 additions and 412 deletions
|
@ -58,7 +58,7 @@ fun succ(term1: Expression, term2: Expression, subs: Substitutions): Answers {
|
|||
it.fold(
|
||||
onSuccess = { result ->
|
||||
val t1 = applySubstitution(term1, result)
|
||||
if (t1 in result) {
|
||||
if (t1 in result || t1 in result.values) {
|
||||
val e1 = t1.simplify(result)
|
||||
if (e1.to is Integer && e1.to.value < 0) {
|
||||
return@sequence
|
||||
|
|
|
@ -13,7 +13,15 @@ import prolog.ast.arithmetic.Float
|
|||
|
||||
// Apply substitutions to a term
|
||||
fun applySubstitution(term: Term, subs: Substitutions): Term = when {
|
||||
variable(term, emptyMap()) -> subs[(term as Variable)] ?: term
|
||||
variable(term, emptyMap()) -> {
|
||||
var result = subs[(term as Variable)]
|
||||
|
||||
while (result != null && result is Variable && result in subs) {
|
||||
result = subs[result]
|
||||
}
|
||||
|
||||
result ?: term
|
||||
}
|
||||
atomic(term, subs) -> term
|
||||
compound(term, subs) -> {
|
||||
val structure = term as Structure
|
||||
|
@ -25,7 +33,7 @@ fun applySubstitution(term: Term, subs: Substitutions): Term = when {
|
|||
|
||||
//TODO Combine with the other applySubstitution function
|
||||
fun applySubstitution(expr: Expression, subs: Substitutions): Expression = when {
|
||||
variable(expr, subs) -> applySubstitution(expr as Term, subs) as Expression
|
||||
variable(expr, emptyMap()) -> applySubstitution(expr as Term, subs) as Expression
|
||||
atomic(expr, subs) -> expr
|
||||
expr is LogicOperator -> {
|
||||
expr.arguments = expr.arguments.map { applySubstitution(it, subs) }
|
||||
|
|
Reference in a new issue