作为erlang中的参数

时间:2015-06-30 10:53:22

标签: functional-programming erlang

我试图做这样的事情:

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


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

但看到警告并且代码失败:

function sum/2 is unused

如何修复代码?

NB:这只是一个说明问题的示例,因此没有理由提出使用fun - 表达式的解决方案。

1 个答案:

答案 0 :(得分:8)

Erlang有更明确的语法:

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

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

另请参阅“Learn you some Erlang”:

  

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

     

...

     

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