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(); }
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(); }