Coverage Summary for Class: AppendLists (it.unibo.tuprolog.argumentation.core.primitives.utils)
| Class |
Class, %
|
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
| AppendLists |
100%
(1/1)
|
100%
(2/2)
|
50%
(3/6)
|
47.4%
(9/19)
|
70.2%
(59/84)
|
package it.unibo.tuprolog.argumentation.core.primitives.utils
import it.unibo.tuprolog.argumentation.core.runtime.Arg2pUnificator
import it.unibo.tuprolog.core.List
import it.unibo.tuprolog.core.Term
import it.unibo.tuprolog.solve.ExecutionContext
import it.unibo.tuprolog.solve.Signature
import it.unibo.tuprolog.solve.exception.error.TypeError
import it.unibo.tuprolog.solve.primitive.Primitive
import it.unibo.tuprolog.solve.primitive.Solve
/** appendLists(Lists, Result): Result is the concatenation of the lists in Lists */
internal object AppendLists : Primitive {
val signature: Signature = Signature("appendLists", 2)
override fun solve(request: Solve.Request<ExecutionContext>): Sequence<Solve.Response> {
val lists: Term = request.arguments[0]
if (lists !is List) {
throw TypeError.forGoal(
request.context,
request.signature,
TypeError.Expected.LIST,
lists,
)
}
val items =
lists.toList().flatMap { list ->
if (list !is List) {
throw TypeError.forGoal(
request.context,
request.signature,
TypeError.Expected.LIST,
list,
)
}
list.toList()
}
val unifier = Arg2pUnificator.mgu(request.arguments[1], List.of(items))
return sequenceOf(if (unifier.isSuccess) request.replyWith(unifier) else request.replyFail())
}
}