我剛開始擺弄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