对Erlang表达式的帮助

对Erlang表达式的帮助,erlang,Erlang,我有条件表达式。如果e1的值为零,则整个表达式的值为e2,如果e1的值为其他值,则整个表达式的值为e3。有人能帮我指出如何添加条件表达式的正确方向吗 case E1 =:= 0 of true -> E2; _ -> E3 end 若E1是guard中允许的表达式,它将生成与 if E1 =:= 0 -> E2; true -> E3 end 您可以将其设置为宏: -define(IF(E1, E2, E3), case E1 =:

我有条件表达式
。如果e1的值为零,则整个表达式的值为e2,如果e1的值为其他值,则整个表达式的值为e3。有人能帮我指出如何添加条件表达式的正确方向吗

case E1 =:= 0 of
    true -> E2;
    _    -> E3
end
若E1是guard中允许的表达式,它将生成与

if E1 =:= 0 -> E2;
   true     -> E3
end
您可以将其设置为宏:

-define(IF(E1, E2, E3), case E1 =:= 0 of
                           true -> E2;
                           _    -> E3
                        end).
若E1是guard中允许的表达式,它将生成与

if E1 =:= 0 -> E2;
   true     -> E3
end
您可以将其设置为宏:

-define(IF(E1, E2, E3), case E1 =:= 0 of
                           true -> E2;
                           _    -> E3
                        end).
2备注:

  • 0
    not 0
    不是布尔表达式常用的值,在erlang中,它们是原子
    true
    false

  • 虽然可以定义带有参数的宏,但通过包含文件在多个模块之间共享这些宏并不常见。例外情况是应用程序或库范围内的记录定义

我认为,编写此选项的两种常见方法是直接在代码中:

Result = case E1 of
    0 -> E2;
    _ -> E3
end,
定义一个局部函数:

choose(0,E2,_) -> E2;
choose(_,_,E3) -> E3.
...
Result = choose(E1,E2,E3),
当然(尽管我的第二句话暗示您将一次又一次地重复宏定义),您可以使用宏对第一个宏进行编码:

-define(CHOOSE(E1,E2,E3),case E1 of 0 -> E2; _ -> E3 end).
...
Result = ?CHOOSE(E1,E2,E3),
另请参见本主题:

2备注:

  • 0
    not 0
    不是布尔表达式常用的值,在erlang中,它们是原子
    true
    false

  • 虽然可以定义带有参数的宏,但通过包含文件在多个模块之间共享这些宏并不常见。例外情况是应用程序或库范围内的记录定义

我认为,编写此选项的两种常见方法是直接在代码中:

Result = case E1 of
    0 -> E2;
    _ -> E3
end,
定义一个局部函数:

choose(0,E2,_) -> E2;
choose(_,_,E3) -> E3.
...
Result = choose(E1,E2,E3),
当然(尽管我的第二句话暗示您将一次又一次地重复宏定义),您可以使用宏对第一个宏进行编码:

-define(CHOOSE(E1,E2,E3),case E1 of 0 -> E2; _ -> E3 end).
...
Result = ?CHOOSE(E1,E2,E3),

另请参见本主题:

在什么类型中表示
?你能给出一个代码示例吗?-define(如果(E1,E2,E3),案例E1=:=1的true->E2;false->E3 end)。这个怎么样?
0中的案例e1->e2;\uu->e3结束。
您是否打算将
0.0
也算作
0
?请注意,这将对可能的解决方案产生影响,因为浮点零与整数0不匹配,但可以使用
==
进行比较。表示的是什么类型的
?你能给出一个代码示例吗?-define(如果(E1,E2,E3),案例E1=:=1的true->E2;false->E3 end)。这个怎么样?
0中的案例e1->e2;\uu->e3结束。
您是否打算将
0.0
也算作
0
?请注意,这将对可能的解决方案产生影响,因为浮点0与整数0不匹配,但可以使用
=
进行比较。