If statement ERLANG+IF+BOOLEAN
我想在erlang做这件事。。我该怎么做? 请注意,这是一个示例代码。我想做的是一个if语句中的两个条件&这个布尔函数。If statement ERLANG+IF+BOOLEAN,if-statement,erlang,boolean,If Statement,Erlang,Boolean,我想在erlang做这件事。。我该怎么做? 请注意,这是一个示例代码。我想做的是一个if语句中的两个条件&这个布尔函数。 欢迎提供任何帮助。实际上不需要z-&z++。您可以使用case语句 *此示例将始终使用两个元素{Z,X}返回元组 Boolean x = true; int y = 1; int z = 1; if(y ==1 && x == true){ z++; x = false; } else{ z--; x = true; } 如果
欢迎提供任何帮助。实际上不需要z-&z++。您可以使用case语句 *此示例将始终使用两个元素{Z,X}返回元组
Boolean x = true;
int y = 1;
int z = 1;
if(y ==1 && x == true){
z++;
x = false;
}
else{
z--;
x = true;
}
如果您需要使用精确的“If”语句,这里就是一个示例
case_statement() ->
X = true,
Y = 1,
Z = 1,
case {Y, X} of
{1, true} ->
{Z + 1, false};
_ ->
{Z -1, true}
end.
您可以使用case语句 *此示例将始终使用两个元素{Z,X}返回元组
Boolean x = true;
int y = 1;
int z = 1;
if(y ==1 && x == true){
z++;
x = false;
}
else{
z--;
x = true;
}
如果您需要使用精确的“If”语句,这里就是一个示例
case_statement() ->
X = true,
Y = 1,
Z = 1,
case {Y, X} of
{1, true} ->
{Z + 1, false};
_ ->
{Z -1, true}
end.
这在二郎是永远不会发生的。Erlang变量只能分配一次,这也意味着不能在Erlang中执行var++和var-操作
您可以使用function子句头中称为guards的内容对函数参数使用布尔过滤器。在其他语言中,逗号的作用类似于&,分号的作用类似于| |
在外壳中:
-module(my).
-compile(export_all).
guard: Y==1 && X
+----------+
| |
| |
go(X, Y) when Y==1, X ->
false;
go(_, _) ->
true.
go_test() ->
false = go(true, 1),
true = go(false, 1),
true = go(true, 20),
all_tests_passed.
根据Wotjek Surowka的说法,go/2可以在没有警卫的情况下编写得更简单。由于只有一个参数组合的结果为false,而所有其他参数组合的结果为true,因此您可以编写:
~/erlang_programs$ erl
Erlang/OTP 20 [erts-9.3] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V9.3 (abort with ^G)
1> c(my).
my.erl:2: Warning: export_all flag enabled - all functions will be exported
{ok,my}
2> my:go_test().
all_tests_passed
3>
这在二郎是永远不会发生的。Erlang变量只能分配一次,这也意味着不能在Erlang中执行var++和var-操作
您可以使用function子句头中称为guards的内容对函数参数使用布尔过滤器。在其他语言中,逗号的作用类似于&,分号的作用类似于| |
在外壳中:
-module(my).
-compile(export_all).
guard: Y==1 && X
+----------+
| |
| |
go(X, Y) when Y==1, X ->
false;
go(_, _) ->
true.
go_test() ->
false = go(true, 1),
true = go(false, 1),
true = go(true, 20),
all_tests_passed.
根据Wotjek Surowka的说法,go/2可以在没有警卫的情况下编写得更简单。由于只有一个参数组合的结果为false,而所有其他参数组合的结果为true,因此您可以编写:
~/erlang_programs$ erl
Erlang/OTP 20 [erts-9.3] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V9.3 (abort with ^G)
1> c(my).
my.erl:2: Warning: export_all flag enabled - all functions will be exported
{ok,my}
2> my:go_test().
all_tests_passed
3>
若您编写函数式语言,特别是Erlang,请避免考虑If语句,尽管Erlang case支持这一点
始终考虑模式匹配。如果您编写函数式语言,特别是Erlang,请避免考虑If语句,尽管Erlang案例支持这一点
始终考虑模式匹配。在计算机编程中,您永远不需要检查布尔变量与布尔值的相等性。换句话说,if X==true产生的结果与if X相同,后者效率更高,因为不需要对两个值进行比较。在计算机编程中,您永远不需要检查布尔变量与布尔值的相等性。换句话说,如果X==true产生的结果与如果X相同,后者更有效,因为不需要对两个值进行比较。为什么当Y==1,X->而不是gotrue,1->?为什么当Y==1,X->而不是gotrue,1->时是goX,Y?