2011-06-22 23 views
2

異なる数のパラメータで同じ関数を作成する方法があるかどうかは疑問です。異なる数のパラメータを持つ関数

sum_of_n(Num)-> 
    sum_of_n(Num, 0); 
sum_of_n(0, Accum)-> 
    Accum; 
sum_of_n(Num, Accum) -> 
    sum_of_n(Num - 1, Accum + Num). 

Erlangは、1つのパラメータと2つのパラメータを同時に使用して関数を作成することはできません。このような関数を作成する良い方法はありますか?あるいは2つの異なる関数を使う必要がありますか?

答えて

6

あなたが同じ名前を持つ2つの異なる機能を持っていますが、引数の数が異なることができます:あなたは、例えば、FunName/NumberOfArgsとしてそれらを参照することができexport

sum_of_n(Num)-> 
    sum_of_n(Num, 0). %% Note the period 

sum_of_n(0, Accum)-> 
    Accum; 
sum_of_n(Num, Accum) -> 
    sum_of_n(Num - 1, Accum + Num). 

funなど

-export([sum_of_n/1]). 
9

あなたはほぼそこにいました。

同じアリティ(引数の数)がある場合は、;の機能ヘッドのみを続行します。あなたが幸せに同じ名前が異なるアリティと機能を持つことができます - ちょうど各アリティブロックを終了するために.を使用します。

sum_of_n(Num)-> 
    sum_of_n(Num, 0). 

sum_of_n(0, Accum)-> 
    Accum; 
sum_of_n(Num, Accum) -> 
    sum_of_n(Num - 1, Accum + Num). 
+3

正しい。 Erlangでは、関数はその名前だけでなく、その名前と引数の数(arity)によっても識別されます。 –

関連する問題