我刚开始摆弄Erlang。 我见过很多,其中模式匹配的函数声明中使用的例子,像这样:Erlang函数重载
factorCount (N) ->
Sqrt = math:sqrt (N),
ISqrt = trunc(Sqrt),
if ISqrt == Sqrt -> factorCount (N, ISqrt, 1, -1);
true -> factorCount (N, ISqrt, 1, 0)
end.
factorCount (_N, ISqrt, Candidate, Count) when Candidate > ISqrt -> Count;
factorCount (N, ISqrt, Candidate, Count) ->
case N rem Candidate of
0 -> factorCount (N, ISqrt, Candidate + 1, Count + 2);
_ -> factorCount (N, ISqrt, Candidate + 1, Count)
end.
为什么做这样? 例如
factorCount (_N, ISqrt, Candidate, Count) when Candidate > ISqrt -> Count;
factorCount (N, ISqrt, Candidate, Count) ->
为什么这不仅仅是一个函数的内部条件呢?
你得已经很好的答案,我也将是添加,因为二郎神使用递归功能广泛,可以很方便地分开在不同的条款递归的不同的情况:这样你在第一线的测试案例,和递归在每个子句的最后一行调用(或基本情况的返回值),每个子句都有一些注释,它更容易阅读和维护。 – Pascal