我在这个模块代码中错了

时间:2012-05-15 09:52:22

标签: erlang

我创建了一个包含以下代码的模块

 -module('calc') .
 -export([sum/2]) . (0)

 sum(L) -> sum(L,0);   (1)
 sum([],N) -> N;   (2)
 sum([H|T], N) -> sum(T, H + N) (3) .

并且在shell中,当我编译它时返回错误如下

 calc.erl:5: head mismatch
 calc.erl:2: function sum/2 undefined
 error

根据我对本书的理解,1个条款将收到列表并将其传递给(3)。然后(3)将返回所需的结果 但我不知道我犯了哪个错误。请帮帮我。

And please help me to understand what is /2 in export statement.

2 个答案:

答案 0 :(得分:7)

第(1)行有语法错误。函数sum / 1和sum / 2是不同的,因此您的代码应如下所示:

sum(L) -> sum(L,0). %% notice the . instead of ;

sum([],N) -> N;
sum([H|T], N) -> sum(T, H + N).

/ 2是你的函数的 arity ,也就是它所需的参数数量。因此,在您的情况下,您要导出的函数是sum / 1.

答案 1 :(得分:0)

检查此链接

Write a function that calculate the sum of integers in a list in Erlang

export语句中的

/ 2表示函数sum的参数个数。