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++是不需要的。
发布于 2019-02-08 20:15:22
如果您编写函数式语言,特别是Erlang,请避免考虑If语句,尽管Erlang大小写支持这一点。
总是想到模式匹配。
发布于 2019-02-07 08:38:52
您可以使用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.发布于 2019-02-08 00:58:24
Boolean x = true;
...
x = false;这在erlang是不可能发生的。erlang变量只能分配一次,这也意味着您不能在Erlang中执行var++和var--。
您可以在函数子句的头上使用所谓的守护符来对函数参数使用布尔筛选器。在警卫中,逗号在其他语言中的作用类似于&&,分号的作用类似于||。
-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.在外壳中:
~/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> 按照Wotjek Surowka,go/2可以写得更简单,没有警卫。由于只有一个参数组合的结果是false,而所有其他参数组合都生成一个true结果,所以可以编写:
go(true, 1) ->
false;
go(_, _) ->
true.https://stackoverflow.com/questions/54568659
复制相似问题