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)->真。