作者:志薇俊元4565 | 来源:互联网 | 2023-05-28 11:35
我正在学习Erlang
,按照Joe
书中所述,问题之一
如果X是偶数整数,则函数even(X)应该返回true,否则返回false。如果X是一个奇数整数,odd(X)应该返回true。
我解决这个问题的方法是
-module(math_functions).
%% API
-export([even/1, odd/1]).
even(Integer) -> (Integer >= 0) and (Integer rem 2 =:= 0).
odd(Integer) -> (Integer >= 1) and (Integer rem 2 =/= 0).
并运行为
Eshell V6.2 (abort with ^G)
1> math_functions:odd(13).
true
2> math_functions:odd(-13).
false
3> math_functions:odd(1).
true
4> math_functions:even(1).
false
5> math_functions:even(2).
true
6> math_functions:even(-2).
false
7>
我的问题是,是否有更好的方法可以做到这一点
谢谢
1> Steve Vinosk..:
您可以使用防护将自己限制为大于或等于零的整数,然后按照问题注释中的建议检查最低有效位。您还可以odd/1
根据以下方面进行定义even/1
:
even(X) when X >= 0 -> (X band 1) == 0.
odd(X) when X > 0 -> not even(X).
保护是函数头的一部分,因此,如果调用even(-1)
它,将无法以与调用完全相同的方式进行匹配even(1, 2)
(即,参数数量错误)。