If statement ERLANG+IF+BOOLEAN

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; } 如果

我想在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;
}
如果您需要使用精确的“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?