Divmod:一个 Elixir 函数中除法的商和余数

aef*_*aef 5 math elixir

在许多编程语言中,存在一种组合运算,它将除法的商和余数都返回为整数。在很多情况下,调用它是divmod因为它同时满足除法和一步求模函数的目的。

我认为进行一次操作的目的是,除法计算不需要执行两次,并且结果不需要表示为可能有损的浮点值。

Elixir中有这样的组合功能吗?我只能分别找到divrem

Ale*_*kin 4

没有语言核心库,但您可以轻松地自己构建它:

\n\n\n\n
divmod =\n  fn e, d ->\n    ~w|div rem|a\n    |> Enum.map(&apply(Kernel, &1, [e, d]))\n    |> List.to_tuple()\n  end\n#\xe2\x87\x92\xc2\xa0#Function<12.99386804/2 in :erl_eval.expr/5>\ndivmod.(5, 2)\n#\xe2\x87\x92\xc2\xa0{2, 1}\n
Run Code Online (Sandbox Code Playgroud)\n\n

它\xe2\x80\x99s 没有出现在标准库中可能有两个原因:a)Elixir意识形态是提供一个脚手架,而不是瑞士刀框架;b)Erlang实际上并不是做数学的最佳选择。

\n

  • FWIW,[这里有一个 PR](https://github.com/elixir-lang/elixir/pull/4795) 将这样的功能添加到 Elixir 核心,但被核心团队拒绝了。 (3认同)