Erlang:检查两个值是否为零的最短方法?

Erlang:检查两个值是否为零的最短方法?,erlang,Erlang,我正在创建一个函数,它将X和Y作为参数,如果X为0,Y为0,或者X和Y均为0,则返回false。我目前正在使用case语句,但我想知道是否可以将此函数写得更短(例如,将两个“false”案例合并为一个案例) 您可以使用和: validate_input(X, Y) -> X =/= 0 andalso Y =/= 0. 您可以使用和: validate_input(X, Y) -> X =/= 0 andalso Y =/= 0. 经过进一步搜索,我还找到了以下解

我正在创建一个函数,它将
X
Y
作为参数,如果
X
为0,
Y
为0,或者
X
Y
均为0,则返回
false
。我目前正在使用case语句,但我想知道是否可以将此函数写得更短(例如,将两个“false”案例合并为一个案例)


您可以使用

validate_input(X, Y) ->
    X =/= 0 andalso Y =/= 0.

您可以使用

validate_input(X, Y) ->
    X =/= 0 andalso Y =/= 0.

经过进一步搜索,我还找到了以下解决方案:

validate_input(X, Y) ->
    case {X, Y} of
        {X, Y} when X == 0; Y == 0 -> false;
        _      -> true
    end.
或者更有效,正如莱戈西亚所说:

validate_input(X, Y) when X == 0; Y == 0 -> false;
validate_input(_,_) -> true.

经过进一步搜索,我还找到了以下解决方案:

validate_input(X, Y) ->
    case {X, Y} of
        {X, Y} when X == 0; Y == 0 -> false;
        _      -> true
    end.
或者更有效,正如莱戈西亚所说:

validate_input(X, Y) when X == 0; Y == 0 -> false;
validate_input(_,_) -> true.
另一个解决方案(尽管我更喜欢Legocia的)是使用
if

validate_input(X, Y) ->
  if
    X == 0; Y == 0 -> false;
    true -> true
  end.
另一个解决方案(尽管我更喜欢Legocia的)是使用
if

validate_input(X, Y) ->
  if
    X == 0; Y == 0 -> false;
    true -> true
  end.
我很惊讶,不,我很震惊,功能头中的简单匹配还没有被推荐:

validate_input(0, _) -> true;
validate_input(_, 0) -> true;
validate_input(_, _) -> false.
“紧凑”代码并不是为了减少行数,而是为了减少解释给定代码时必须回忆的概念数量。

我感到惊讶,不,我感到震惊的是,函数头中的简单匹配还没有被推荐:

validate_input(0, _) -> true;
validate_input(_, 0) -> true;
validate_input(_, _) -> false.

“紧密”代码并不是减少行数,而是减少解释给定代码时必须回忆的概念数量。

您可以将保护直接放在函数头上:
当X==0时验证输入(X,Y);Y==0->false;validate_input(u,u)->true。
当X==0时,您可以将保护直接放在函数头上:
validate_input(X,Y);Y==0->false;验证输入(u,u)->真。