对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
不是布尔表达式常用的值,在erlang中,它们是原子not 0
和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
不是布尔表达式常用的值,在erlang中,它们是原子not 0
和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不匹配,但可以使用=
进行比较。