Yes, please send a pull request. :)


*José Valim*
www.plataformatec.com.br
Skype: jv.ptec
Founder and Director of R&D

On Mon, Aug 8, 2016 at 10:24 AM, Wiebe-Marten Wijnja <
[email protected]> wrote:

> Elixir has `rem(dividend, divisor)` to calculate the remainder of an
> integer division. However, as you probably know, there are different ways
> to handle remainders with negative numbers:
>
> `rem` will take the remainder, but use the sign of the dividend, which
> means that the following function definition:
>
> def is_odd(n)
>   rem(n, 2) == 1
> end
>
> will fail for -1, -3, etc, as `rem(-3, 2)`, for instance, has as answer
> *-1*.
>
> It is also possible to make a *modulo* function, which uses the sign of
> the divisor. This has the advantage over the remainder function that it
> maps the whole domain of integers unto a smaller, cyclic, range of numbers.
> This is highly useful in many algorithms dealing with numbers or indices.
>
> Many programming languages both have a remainder and a modulo function. I
> have seen multiple people roll their own definitions of `mod` in their
> Elixir libraries, because they needed it.
>
> I propose the addition of the modulo function, `mod(a, n)` to Elixir.
>
> A possible implementation is as follows:
>
> defmacro mod(a, n) do
>   quote do
>     unquote(a) - (unquote(n) * div(unquote(a), unquote(n))
>   end
> end
>
> This implementation is guard-safe, so it can be used anywhere where `div`
> and `rem` are also allowed.
>
> --
> You received this message because you are subscribed to the Google Groups
> "elixir-lang-core" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit https://groups.google.com/d/
> msgid/elixir-lang-core/3b010961-59a1-408c-9b17-
> 4bd9179d4a95%40googlegroups.com
> <https://groups.google.com/d/msgid/elixir-lang-core/3b010961-59a1-408c-9b17-4bd9179d4a95%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"elixir-lang-core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4KLCoO9OqOYnhFzX6T8PLVQZx7JiwLOZuSvA_ib7yMYWg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to