[swift-evolution] [Pitch] 'Double modulo' operator

Adam Nemecek adamnemecek at gmail.com
Sat May 21 15:22:34 CDT 2016


I think that Swift could use the 'double modulo' operator which is for
example in CoffeeScript (some discussion can be found here

This operator, unlike normal modulo, takes sign from the divisor, not the
dividend e.g. -10 % 3 == -1, but -10 %% 3 == 2.

In practice, this operator is useful for 'cyclical' indexing. For example,
it would be useful for calculating the real index into a collection when we
are using an index outside of the range of valid indices and could be used
to index into a collection using a negative index à la Python and Ruby
(where [1,2,3,4][-1] == 4).

The implementation would probably be something along these lines:

infix operator %% {
  associativity left
  precedence 150

func %%<T: IntegerArithmeticType>(lhs:T, rhs:T) -> T {
  return (lhs % rhs + rhs) % rhs

If accepted, this could be later incorporated into a method or operator
that works directly with collections using their count property.
Maybe the syntax could be something like [1,2,3,4] %% -1 == 4.

Ideas, suggestions?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160521/2e1f3437/attachment.html>

More information about the swift-evolution mailing list