On Tue, Apr 5, 2016 at 4:28 PM, Dave Abrahams via swift-evolution <swift-evolution@swift.org> wrote: > > on Tue Apr 05 2016, Xiaodi Wu <swift-evolution@swift.org> wrote: > >> Right. I would argue that `(a+s...b).striding(by: s).reversed` is a great >> deal >> less readable than `stride(from: b, to: a, by: -s)`. And since the latter is >> the >> status quo, I would say that it's a point against restricting strides to the >> proposed syntax. > > Yes, those are all points. But it totally avoids the question of > whether the case of striding over an inverted half-open range by a > negative step is an important enough case to be worth complicating the > library to make it readable.
At the risk of tedious pedantry-- Given that this discussion was spawned from one about Swift's for loop, it would be remiss not to circle back and point out that what's at issue isn't a matter of complicating an existing implementation to support stride to (or, striding over an inverted half-open range) with negative stride size, but rather whether a proposed simplification ought to be implemented that removes this already supported use case. IMO, the existing implementation is not overly inelegant, and deep in the logic of StrideToIterator is an if statement (using a ternary operator in the expression, no less!) to account for negative stride size--so I can only conclude that its being supported isn't merely a happy byproduct of the current implementation but very much an explicitly planned-for feature. > If it is important enough, I am much more inclined to support > > (a<..b).striding(by: s).reversed > > or > > (a<..b).striding(by: -s) // i.e., negative strides automatically reverse > > simply because it makes a presumably-useful concept available (inverse > half-open range), re-uses existing syntax, and doesn't bring up these > naming questions. > > Frankly, > > (a+s...b).striding(by: -s) > > isn't all that bad. > >> On Tue, Apr 5, 2016 at 3:57 PM Dave Abrahams via swift-evolution >> <swift-evolution@swift.org> wrote: >> >> on Tue Apr 05 2016, Xiaodi Wu >> <swift-evolution@swift.org> wrote: >> >> > Certainly, for integer literals and strides of -1. >> > >> > I meant more generally that removal of stride(...) will eliminate the >> > possibility of striding to but not through arbitrary half-open >> intervals >> (a, b], >> > where a < b, by a negative increment, because there is no such thing as >> `a>..b` >> > to express such an interval as a Swift range. >> > Of course, all such cases can be handled by adjusting the endpoint and >> using a >> > closed range instead >> > >> >> Indeed, if b - a is a multiple of s, >> >> (a+s...b).striding(by: s).reversed >> >> works. >> >> The question is whether this case is important enough to create a >> special family of functions for, and then deal with the naming issues >> raised by >> >> https://github.com/apple/swift-evolution/blob/master/proposals/0051-stride-semantics.md >> >> ? >> >> > On Tue, Apr 5, 2016 at 2:54 PM Dave Abrahams >> > <dabrah...@apple.com> wrote: >> > >> > on Tue Apr 05 2016, Xiaodi Wu <xiaodi.wu-AT-gmail.com> wrote: >> > >> > > On Mon, Apr 4, 2016 at 1:22 PM, Dave Abrahams >> > <dabrah...@apple.com> wrote: >> > >> >> > >> on Sat Apr 02 2016, Xiaodi Wu <xiaodi.wu-AT-gmail.com> wrote: >> > >> >> > >>> [snip] >> > >>> >> > >>> Not included: >> > >>> 1. I know Ranges are in flux, so I've held off on extending Range >> with >> > >>> a striding(by:) method in this proof-of-concept. >> > >> >> > >> They're not in flux, except for not having been reviewed yet; they >> are >> > >> settled in the swift-3-indexing-model branch. >> > > >> > > Did not know that. Will have to study what's there in more detail. >> > > >> > >>> 2. No attempt at the suggested stride(from:to:steps:) quite yet. >> > >> >> > >> #1 and #2 are mutually exclusive; we prefer #1 as it removes >> questions >> > >> about the meaning of "to" or "through." >> > > >> > > I wasn't aware that was the thinking. Limiting strides to >> > > `striding(by:)` removes the ability to express `stride(from: 0, to: >> > > -10, by: -1)` >> > >> > IMO this: >> > >> > (-9...0).reverse() >> > >> > is better than >> > >> > stride(from: 0, to: -10, by: -1) >> > >> > What do you think? >> > >> > -- >> > Dave >> > >> > _______________________________________________ >> > swift-evolution mailing list >> > swift-evolution@swift.org >> > https://lists.swift.org/mailman/listinfo/swift-evolution >> >> -- >> Dave >> >> _______________________________________________ >> swift-evolution mailing list >> swift-evolution@swift.org >> https://lists.swift.org/mailman/listinfo/swift-evolution >> >> _______________________________________________ >> swift-evolution mailing list >> swift-evolution@swift.org >> https://lists.swift.org/mailman/listinfo/swift-evolution > > -- > Dave > > _______________________________________________ > swift-evolution mailing list > swift-evolution@swift.org > https://lists.swift.org/mailman/listinfo/swift-evolution _______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution