<div dir="ltr"><div>It&#39;s a fundamental mathematical operator (it&#39;s actually the &#39;true modulo&#39; operation), the % operator is the remainder operation. This distinction is not a made up distinction (e.g. <a href="https://blogs.msdn.microsoft.com/ericlippert/2011/12/05/whats-the-difference-remainder-vs-modulus/">https://blogs.msdn.microsoft.com/ericlippert/2011/12/05/whats-the-difference-remainder-vs-modulus/</a>)</div><div><br></div><div><span style="font-size:12.8px">&gt; You can simply use arr.endIndex.advancedBy(-1) for</span><br style="font-size:12.8px"></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">You are not taking into account when a function is passed an argument and needs it to be in some range. It&#39;s not that it&#39;s impossible to implement, it&#39;s just that this is more ergonomic.</span></div><div><span style="font-size:12.8px"><br></span></div><div><br></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px"><br></span></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, May 21, 2016 at 2:09 PM, Leonardo Pessoa <span dir="ltr">&lt;<a href="mailto:me@lmpessoa.com" target="_blank">me@lmpessoa.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Adam, there is no need for an operator to compute the real index using<br>
a negative index. You can simply use arr.endIndex.advancedBy(-1) for<br>
that or, in this particular case, arr.endIndex.predecessor(). Right<br>
now this is the standard, although I&#39;&#39;d rather use int indices<br>
directly.<br>
<span class="im HOEnZb"><br>
On 21 May 2016 at 17:56, Adam Nemecek &lt;<a href="mailto:adamnemecek@gmail.com">adamnemecek@gmail.com</a>&gt; wrote:<br>
&gt;&gt; I think this is a very particular case<br>
&gt;<br>
&gt; I disagree. Swift has the concept of a range all over the place and this is<br>
&gt; a fundamental range operation.<br>
&gt;<br>
&gt;&gt;  As you pointed out this already can be implemented using resources<br>
&gt;&gt; already available in the language when needed.<br>
&gt;<br>
&gt; Right. A lot of things in the standard library can be implemented using<br>
&gt; resources already available, it&#39;s about the ergonomics.<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; On Sat, May 21, 2016 at 1:44 PM, Leonardo Pessoa &lt;<a href="mailto:me@lmpessoa.com">me@lmpessoa.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; Adam, I think this is a very particular case and not something that needs<br>
&gt;&gt; to be added to the language. As you pointed out this already can be<br>
&gt;&gt; implemented using resources already available in the language when needed.<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
</span><div class="HOEnZb"><div class="h5">&gt;&gt; On 21 May 2016 at 17:22, Adam Nemecek via swift-evolution<br>
&gt;&gt; &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Hello,<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; I think that Swift could use the &#39;double modulo&#39; operator which is for<br>
&gt;&gt;&gt; example in CoffeeScript (some discussion can be found here<br>
&gt;&gt;&gt; <a href="https://github.com/jashkenas/coffeescript/issues/1971" rel="noreferrer" target="_blank">https://github.com/jashkenas/coffeescript/issues/1971</a>).<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; This operator, unlike normal modulo, takes sign from the divisor, not the<br>
&gt;&gt;&gt; dividend e.g. -10 % 3 == -1, but -10 %% 3 == 2.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; In practice, this operator is useful for &#39;cyclical&#39; indexing. For<br>
&gt;&gt;&gt; example, it would be useful for calculating the real index into a collection<br>
&gt;&gt;&gt; when we are using an index outside of the range of valid indices and could<br>
&gt;&gt;&gt; be used to index into a collection using a negative index à la Python and<br>
&gt;&gt;&gt; Ruby (where [1,2,3,4][-1] == 4).<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; The implementation would probably be something along these lines:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; infix operator %% {<br>
&gt;&gt;&gt;   associativity left<br>
&gt;&gt;&gt;   precedence 150<br>
&gt;&gt;&gt; }<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; func %%&lt;T: IntegerArithmeticType&gt;(lhs:T, rhs:T) -&gt; T {<br>
&gt;&gt;&gt;   return (lhs % rhs + rhs) % rhs<br>
&gt;&gt;&gt; }<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; If accepted, this could be later incorporated into a method or operator<br>
&gt;&gt;&gt; that works directly with collections using their count property.<br>
&gt;&gt;&gt; Maybe the syntax could be something like [1,2,3,4] %% -1 == 4.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Ideas, suggestions?<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt; swift-evolution mailing list<br>
&gt;&gt;&gt; <a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a><br>
&gt;&gt;&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
&gt;&gt;&gt;<br>
&gt;&gt;<br>
&gt;<br>
</div></div></blockquote></div><br></div>