public static IEnumerable AsEnumerable(this Query query, bool revertAll = false) { try { Trail.Enter(); var nextQuery = query; while (nextQuery != null) { var currentQuery = nextQuery; var result = currentQuery.Run(); switch (result.Type) { case QueryResultType.ChoicePoint: nextQuery = result.Continuation; Trail.Current.ChoicePoint(result.Alternate); break; case QueryResultType.Success: yield return(null); nextQuery = Trail.Current.Backtrack(); break; default: nextQuery = Trail.Current.Backtrack(); break; } } } finally { Trail.Exit(revertAll); } }