Call & Ignore
This commit is contained in:
parent
9b454a9669
commit
5bfeb96176
7 changed files with 118 additions and 28 deletions
|
@ -114,7 +114,20 @@ class Conjunction(val left: LogicOperand, private val right: LogicOperand) :
|
|||
open class Disjunction(private val left: LogicOperand, private val right: LogicOperand) :
|
||||
LogicOperator(Atom(";"), left, right) {
|
||||
override fun satisfy(subs: Substitutions): Answers = sequence {
|
||||
yieldAll(left.satisfy(subs))
|
||||
left.satisfy(subs).forEach { left ->
|
||||
left.fold(
|
||||
onSuccess = { leftSubs ->
|
||||
yield(Result.success(leftSubs))
|
||||
},
|
||||
onFailure = { failure ->
|
||||
if (failure is AppliedCut) {
|
||||
val leftSubs = failure.subs
|
||||
yield(Result.failure(AppliedCut(leftSubs)))
|
||||
return@sequence
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
yieldAll(right.satisfy(subs))
|
||||
}
|
||||
|
||||
|
|
Reference in a new issue