IEnumerable<CutState> CallPrimitive(Symbol functor, PrologPrimitives.PrimitiveImplementation handler, object[] args, PrologContext context)
{
if (Trace)
context.TraceOutput("Goal: {0}", new Structure(functor, args));
foreach (var state in handler(args, context))
{
if (Trace)
context.TraceOutput((state == CutState.Continue) ? "Succeed: {0}" : "Cut: {0}", new Structure(functor, args));
yield return state;
if (Trace)
context.TraceOutput("Retry: {0}", new Structure(functor, args));
}
if (Trace)
context.TraceOutput("Fail: {0}", new Structure(functor, args));
context.PopGoalStack();
}