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

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


Hello,

I think that Swift could use the 'double modulo' operator which is for
example in CoffeeScript (some discussion can be found here
https://github.com/jashkenas/coffeescript/issues/1971).

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