[swift-evolution] [Pitch] 'Double modulo' operator
Tim Vermeulen
tvermeulen at me.com
Sun May 22 07:07:29 CDT 2016
+1, I’ve never actually wanted a negative return value from %. Array subscripting and getting an enum case from a raw integer value both expect non-negative integers, so in these cases it only makes sense to deal with positive values.
> Hello,
>
> I think that Swift could use the 'double modulo' operator which is for example in CoffeeScript (some discussion can be found herehttps://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?_______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
>
>
>
More information about the swift-evolution
mailing list