具有不同参数计数的函数

dem*_*mas 2 erlang

我只是想知道是否有任何方法可以创建具有不同参数计数的相同功能?像这样的东西:

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

正如我所看到的,Erlang不允许同时创建具有一个和两个参数的函数.有没有一种很好的方法来创建这样的功能,或者我需要使用两种不同的功能?

Rob*_*rop 9

你快到了!

;如果存在相同的arity(参数个数),则只使用a继续函数头.你可以愉快地拥有相同名称但不同的arity函数 - 只需.用来终止每个arity块:

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

  • 正确.在Erlang中,函数不仅由其名称标识,而且由其名称和参数(arity)标识. (3认同)

Ale*_*nov 6

您可以使用两个不同的函数,它们具有相同的名称,但参数的数量不同:

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

export,fun等你可以把它们称为FunName/NumberOfArgs,例如,

-export([sum_of_n/1]).
Run Code Online (Sandbox Code Playgroud)