作为erlang中的参数

kha*_*iuk 4 erlang functional-programming

我正在尝试做这样的事情:

  -module(count).
  -export([main/0]).


  sum(X, Sum) -> X + Sum.
  main() ->
    lists:foldl(sum, 0, [1,2,3,4,5]).
Run Code Online (Sandbox Code Playgroud)

但看到警告和代码失败:

function sum/2 is unused
Run Code Online (Sandbox Code Playgroud)

如何修复代码?

注意:这只是一个说明问题的示例,因此没有理由提出使用fun-exression的解决方案.

ber*_*eal 8

Erlang有更明确的语法:

-module(count).
-export([main/0]).

sum(X, Sum) -> X + Sum.
main() ->
    lists:foldl(fun sum/2, 0, [1,2,3,4,5]).
Run Code Online (Sandbox Code Playgroud)

另请参阅" 了解一些Erlang ":

如果函数名称没有参数列表,那么这些名称被解释为原子,而原子不能是函数,因此调用失败.

...

这就是为什么必须在语言中添加新的表示法以便从模块外部传递函数的原因.这就是有趣的模块:Function/Arity:它告诉VM使用该特定功能,然后将其绑定到变量.