You have both good points.

In that case, if we still want to define new operators here (which might not 
please everybody), then I'd suggest finding a common prefix or suffix character 
(e.g. `^/` and `^%`) for both the floored division and floored modulo (for one, 
because we can't define `//` as an operator).

But I think it'd be clearest to just make them both top-level functions, e.g. 
`floordiv(p, q)` and `floormod(p, q)`. If anyone uses either a lot, and likes 
to make it terse, it's easy to define a private operator wrapper for it.

— Pyry

> Tony Allevato wrote:
> 
> I've had to write a "true mod" function enough times across different 
> projects (usually for circular buffer indexing or angular arithmetic) that it 
> would absolutely support its inclusion in stdlib (for both integer and 
> floating point types).
> 
> The `%` operator historically has been implemented as "remainder" though 
> (even when called "modulus"), so while it would be nice to be "pure" and have 
> `%` do the right thing, I think it would be too confusing for users to have 
> the operator have a subtly different meaning compared to every other 
> programming language that looks like it.
> 
> I'm not crazy about the `%%` spelling, but I can't think of anything better 
> either at the moment.
> 
>> On Mon, May 23, 2016 at 12:24 PM Adam Nemecek via swift-evolution 
>> <[email protected]> wrote:
>> That kind of breaks backwards compatibility. 
>> 
>> Also currently in swift, the % operator is called the remainder operator, 
>> not the modulo operator, so technically the current implementation is 
>> correct. In Haskell for example, there are two functions, rem (as in 
>> remainder) and mod (as in modulo). I guess we could leave % to mean 
>> remainder and introduce a mod function?
>> 
>> 
>> 
>>> On Mon, May 23, 2016 at 11:59 AM, Pyry Jahkola <[email protected]> wrote:
>>> I wouldn't mind if the standard `%` operator worked like this and there 
>>> would be another top-level function `mod(p, q)` that worked like `%` in C. 
>>> The only times that I've ever needed the modulo operation 
>>> (https://en.wikipedia.org/wiki/Modulo_operation) to behave some way on 
>>> negative values it's always been the suggested 
>>> remainder-of-flooring-division way.
>>> 
>>> On the other hand, there's a performance penalty (avoidable by using the 
>>> other mod operation), so I can understand if not everyone agrees.
>>> 
>>> And like Steve said below, then we'll need a flooring division function (or 
>>> operator) as well. And a flooring `(f, r) = divmod(p, q)` too, I suppose.
>>> 
>>> In any case, I'm probably +1 if a well-thought proposal is brought to the 
>>> table.
>>> 
>>> — Pyry
>>> 
>>> Adam Nemecek wrote:
>>> 
>>>> Would you want to make this a function? Or an operator but a different one?
>>>> 
>>>>> On Mon, May 23, 2016 at 7:30 AM, Stephen Canon <[email protected]> wrote:
>>>>> I’m not really sold on the `%%` spelling, but I think the operation 
>>>>> itself is worth exposing.  This is the remainder of a “flooring” division 
>>>>> (as opposed to the C-family “truncating” division[1]).  If we do provide 
>>>>> it, we should also provide the accompanying divide operation.
>>>>> 
>>>>> – Steve
>>>>> 
>>>>> [1] there are several other ways to define division beyond these two: 
>>>>> remainder is always positive, remainder is closest to zero, etc.  
>>>>> Truncating and flooring division are the most common by a wide margin, 
>>>>> however.
>> 
>> _______________________________________________
>> swift-evolution mailing list
>> [email protected]
>> https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to