查找整数是偶数还是奇数

day*_*mer 0 erlang

我正在学习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).
Run Code Online (Sandbox Code Playgroud)

并运行为

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>   
Run Code Online (Sandbox Code Playgroud)

我的问题是,是否有更好的方法可以做到这一点

谢谢

Ste*_*ski 5

您可以使用防护将自己限制为大于或等于零的整数,然后按照问题注释中的建议检查最低有效位。您还可以odd/1根据以下方面进行定义even/1

even(X) when X >= 0 -> (X band 1) == 0.
odd(X) when X > 0 -> not even(X).
Run Code Online (Sandbox Code Playgroud)

保护是函数头的一部分,因此,如果调用even(-1)它,将无法以与调用完全相同的方式进行匹配even(1, 2)(即,参数数量错误)。