二郎+如果+布尔
ERLANG + IF + BOOLEAN
Boolean x = true;
int y = 1;
int z = 1;
if(y ==1 && x == true){
z++;
x = false;
}
else{
z--;
x = true;
}
我想在 erlang 中做这个..我该怎么做?
(请注意,这是一个示例代码。我想做的是一个 if 语句和这个布尔功能中的两个条件)。
任何帮助都是 welcomed.Actually 不需要 z-- 和 z++。
您可以使用 case 语句
*此示例将始终返回包含两个元素 {Z, X} 的元组
case_statement() ->
X = true,
Y = 1,
Z = 1,
case {Y, X} of
{1, true} ->
{Z + 1, false};
_ ->
{Z -1, true}
end.
如果您需要使用精确的 'if' 语句,这里是示例
if_statement() ->
X = true,
Y = 1,
Z = 1,
if
Y =:= 1 andalso X =:= true ->
{Z +1, false};
true ->
{Z -1, true}
end.
Boolean x = true;
...
x = false;
Erlang 永远不会发生这种情况。 Erlang变量只能赋值一次,这也意味着你不能在erlang中做var++
和var--
。
您可以在函数子句的头部使用所谓的 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.
在shell中:
~/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>
Per Wotjek Surowka,go/2
可以在没有守卫的情况下写得更简单。因为只有一种参数组合的结果是 false
,而所有其他参数组合都会产生 true
结果,所以您可以这样写:
go(true, 1) ->
false;
go(_, _) ->
true.
如果您编写函数式语言,尤其是 Erlang,请避免考虑 if 语句,尽管 Erlang 的大小写支持。
总是想到模式匹配。
Boolean x = true;
int y = 1;
int z = 1;
if(y ==1 && x == true){
z++;
x = false;
}
else{
z--;
x = true;
}
我想在 erlang 中做这个..我该怎么做? (请注意,这是一个示例代码。我想做的是一个 if 语句和这个布尔功能中的两个条件)。 任何帮助都是 welcomed.Actually 不需要 z-- 和 z++。
您可以使用 case 语句
*此示例将始终返回包含两个元素 {Z, X} 的元组
case_statement() ->
X = true,
Y = 1,
Z = 1,
case {Y, X} of
{1, true} ->
{Z + 1, false};
_ ->
{Z -1, true}
end.
如果您需要使用精确的 'if' 语句,这里是示例
if_statement() ->
X = true,
Y = 1,
Z = 1,
if
Y =:= 1 andalso X =:= true ->
{Z +1, false};
true ->
{Z -1, true}
end.
Boolean x = true;
...
x = false;
Erlang 永远不会发生这种情况。 Erlang变量只能赋值一次,这也意味着你不能在erlang中做var++
和var--
。
您可以在函数子句的头部使用所谓的 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.
在shell中:
~/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>
Per Wotjek Surowka,go/2
可以在没有守卫的情况下写得更简单。因为只有一种参数组合的结果是 false
,而所有其他参数组合都会产生 true
结果,所以您可以这样写:
go(true, 1) ->
false;
go(_, _) ->
true.
如果您编写函数式语言,尤其是 Erlang,请避免考虑 if 语句,尽管 Erlang 的大小写支持。
总是想到模式匹配。