【问题标题】:Erlang: Finding a variable and reversing itErlang:查找变量并将其反转
【发布时间】:2016-06-12 22:11:10
【问题描述】:

我需要能够像这样操作变量。

首先找到变量并检查它是什么(在这种情况下是运算符 * / + 等),然后将其反转。例如,~(5+9) 的值为 -14 并且 ~(3-5) 的值为 2。

我该怎么做?

【问题讨论】:

  • 你的意思是“否定”,而不是“反向”?这很容易用负号而不是波浪号来完成,并且适用于您的两个示例。既然运算符不是变量,那么“找到变量并检查它是什么”是什么意思?您想知道如何自动执行此操作吗?

标签: erlang erl


【解决方案1】:
custom_action(A, Operator, B) ->
    operate({A, Operator, B}) * -1.

operate({A, "+", B}) -> A + B;
operate({A, "-", B}) -> A - B;
operate({A, "*", B}) -> A * B;
operate({A, "/", B}) -> A / B.

现在您可以使用custom_action/3custom_action(5, "+", 9) 一样获得-14 和custom_action(3, "-", 5) 获得2。

【讨论】:

    【解决方案2】:

    你说的反转运算符是什么意思?听起来你想做相反的事情 - 所以加法变成减法,反之亦然,乘法变成除法,反之亦然。但是您的示例表明您要执行该操作,然后否定答案。例如,如果您只是“反转运算符”,那么 5+9 将变为 5-9=-4。同样,要获得 5+9=-14,您必须否定 5+9 运算的答案。在我们继续之前你能澄清一下吗?

    【讨论】:

      【解决方案3】:
      1> F=fun({A,'+',B}) -> B+A; ({A,'-',B}) -> B-A; ({A,'/',B}) -> B/A end.
      #Fun<erl_eval.6.54118792>
      2> F({5,'+',9}).
      14
      3> F({3,'-',5}).
      2
      

      【讨论】:

      • OP 不希望 F({5,'+',9}) 返回 14。
      • 刚刚用 Erlang 19 测试过 - F({5,'+',9}). 仍然返回 14
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-24
      • 1970-01-01
      • 2012-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多