<div dir="ltr">I like the idea that Array gains `strinding(by:)` but would also like Range to be like an array, same interface, and hence also gain `strinding(by:)`, hence:<div><br></div><div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><span style="font-size:12.8px">calendar[(startDate ..&lt; endDate).</span><span style="font-size:12.8px">striding(by: .Day)]</span><br></div></blockquote></div></div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature">  -- Howard.<br></div></div>
<br><div class="gmail_quote">On 7 April 2016 at 10:53, Dave Abrahams via swift-evolution <span dir="ltr">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
on Wed Apr 06 2016, Brent Royal-Gordon &lt;brent-AT-architechies.com&gt; wrote:<br>
<br>
&gt;&gt; I (am familiar with and) agree with Dijkstra&#39;s logic, but not with your<br>
&gt;&gt; conclusion about it.  The fact that one representation is more natural<br>
&gt;&gt; for most common computing tasks doesn&#39;t mean it&#39;s not worth supporting<br>
&gt;&gt; the other representations.<br>
&gt;<br>
&gt; I&#39;m not saying that Dijkstra proves that we don&#39;t need any other range<br>
&gt; operators. Rather, I&#39;m saying that he demonstrates why supporting<br>
&gt; `..&lt;` but not `&lt;..` is not arbitrary or capricious. Dijkstra&#39;s<br>
&gt; argument *permits* us to privilege `..&lt;` as uniquely important, but<br>
&gt; doesn&#39;t *force* us to do so.<br>
<br>
I agree.  And I still think it&#39;s uniquely important ;-).<br>
<br>
&gt; To another person just now, you said:<br>
&gt;<br>
&gt;&gt; He was talking about ranges of integer indices, though, and even<br>
&gt;&gt; more-specifically about how to address arrays.  Range&lt;Bound&gt; is a more<br>
&gt;&gt; general concept that applies to much more than indices.  Once you<br>
&gt;&gt; involve floating point (and rationals, and patterns for matching,<br>
&gt;&gt; e.g. UnicodeScalar(&quot;a&quot;)...&quot;z&quot;), the conclusions no longer apply.<br>
&gt;<br>
&gt; I actually think he was talking a little more broadly than<br>
&gt; that—essentially, he was discussing ordered, discrete types. In<br>
&gt; principle, the same argument applies to UnicodeScalars,<br>
<br>
Yes, but I don&#39;t know if he had such types.<br>
<br>
&gt; but not to floating-point numbers (unless you use treat floats as a<br>
&gt; discrete type using `nextafter` as the `successor()` operation, which<br>
&gt; is coherent but not very useful in practice). Having said that, I *do*<br>
&gt; think that `...` is in practice quite useful for many types. I&#39;m less<br>
&gt; certain that `&lt;..` or `&lt;.&lt;` are.<br>
&gt;<br>
&gt; * * *<br>
&gt;<br>
&gt; By the way, another reason to have `stride` as a free function is that<br>
&gt; I think some types need a &quot;strider&quot;, an instance which performs the<br>
&gt; striding.<br>
&gt;<br>
&gt; That was the conclusion I came to when I started experimenting with<br>
&gt; striding over NSDates a week or two ago. The best design I could come<br>
&gt; up with looked like this:<br>
&gt;<br>
&gt;       calendar.using(.Day).stride(from: startDate, to: endDate, by: 1)<br>
<br>
&gt; The `start` and `end` parameters could be grouped together into a<br>
&gt; single parameter to match `stride(over:by:)`, but you can&#39;t put the<br>
&gt; calendar or the unit into the stride—without them, there is no<br>
&gt; coherent way to calculate the distance between two dates.<br>
&gt;<br>
&gt; So if some types need a strider, and will need to have the method<br>
&gt; structured as `strider.stride(something:by:)`, it seems like the free<br>
&gt; function version for types which *don&#39;t* need a strider ought to be<br>
&gt; `stride(something:by:)`. The `something.striding(by:)` design can&#39;t be<br>
&gt; easily adapted to this situation.<br>
<br>
  calendar[startDate..&lt;endDate].striding(by: .Day)<br>
<br>
?<br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
Dave<br>
_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
</font></span></blockquote></div><br></div>