private IEnumerable <CutState> EnumerateArg1Driver(LogicVariable arg1, T2 arg2, PrologContext context) { int tracePointer = context.MarkTrace(); foreach (var newValue in arg1Enumerator(arg2)) { arg1.UnifyWithAtomicConstant(newValue, context); yield return(CutState.Continue); context.RestoreVariables(tracePointer); } }
private IEnumerable <CutState> EnumerateBothDriver(LogicVariable arg1, LogicVariable arg2, PrologContext context) { int tracePointer = context.MarkTrace(); foreach (var pair in doubleEnumerator()) { arg1.UnifyWithAtomicConstant(pair.Arg1, context); arg2.UnifyWithAtomicConstant(pair.Arg2, context); yield return(CutState.Continue); context.RestoreVariables(tracePointer); } }