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
