【问题标题】:Divmod: Quotient and remainder of a division in one Elixir functionDivmod:一个 Elixir 函数中除法的商和余数
【发布时间】:2018-11-04 17:42:02
【问题描述】:

在许多编程语言中,都有一个组合运算,它以整数形式返回除法的商和余数。在很多情况下,它被称为divmod,因为它在一个步骤中同时服务于除法和模函数的目的。

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

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

【问题讨论】:

  • 据我所知,Elixir 没有这个功能。我不相信这实际上是语言中常见的一个功能,但我想你的软件开发经验一定与我不同。

标签: math elixir


【解决方案1】:

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

divmod =
  fn e, d ->
    ~w|div rem|a
    |> Enum.map(&apply(Kernel, &1, [e, d]))
    |> List.to_tuple()
  end
#⇒ #Function<12.99386804/2 in :erl_eval.expr/5>
divmod.(5, 2)
#⇒ {2, 1}

它没有出现在标准库中可能有两个原因:a)Elixir ideology 是提供一个脚手架,而不是瑞士刀框架,b)Erlang 实际上并不是最好的选择数学。

【讨论】:

  • 我知道我可以自己写。您的解决方案受到rem 无法处理负数的影响,但mod 通常支持负数。此外,它可能会计算两次,或者有什么明显的原因为什么在您的示例中不应该发生这种情况?
  • FWIW, here was a PR 向 Elixir 核心添加这样的功能,但被核心团队拒绝。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-01
  • 2011-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多