on Wed Apr 13 2016, plx <swift-evolution@swift.org> wrote: >> On Apr 13, 2016, at 4:26 PM, Dave Abrahams via swift-evolution >> <swift-evolution@swift.org> wrote: >> >> >> on Tue Apr 12 2016, Brent Royal-Gordon <swift-evolution@swift.org> wrote: >> > >>> In these cases, it would be better if the `successor(of:)` method was >>> designed in a way that acknowledged and encapsulated the bounds check >>> that is usually required when it is used: >>> >>> while let nextIndex = collection.successor(of: index) { >>> … >>> index = nextIndex >>> } >> >> I disagree; it doesn't make sense that I should have to check for nil >> when I'm not really interested in the end of the collection as in my >> example above. Many other nontrivial algorithms will have the same >> characteristic. If all you need is to loop through indices to the end, >> there are lots of ways to do it. >> >> Looking closer, what you've got here is actually a *highly* unusual >> case, where you want a pair of indices that you want to always point to >> successive elements. I do not know of any algorithm that would use this >> except maybe bubblesort, and frankly I cannot see any reason to change >> the standard library to support it. Am I missing something? > > Enumerating adjacent pairs from a sequence has its uses; when it’s a > collection you can make the "adjacent pairs” thing itself a > collection, and a pair of adjacent indices from the source collection > makes a natural choice for the non-end-index indices. > > In this case I agree the language doesn’t need to change; just write > the generic “adjacent pairs” thingy and then use it like so: > > // if you *really* wanted values: > for (left,right) in collection.adjacentPairs() { … > > // if you *did* actually want indices; > for (leftIndex,rightIndex) in collection.indices.adjacentPairs() { > > …but all the uses I make of it for higher-level things than > e.g. “algorithms” in the STL sense.
At that level, I think you shouldn't be using low-level index manipulation anyway, which is to say I agree that your adjacentPairs adapter is the right way to go. -- Dave _______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution