编写一个函数来计算Erlang中列表中的整数之和

Kev*_*nle 2 erlang

因为我只是通过阅读书籍和自己的练习(而不是做作业)来学习Erlang,所以即使是我在标题中提到的最简单的任务,我也在努力学习.

这就是我所做的:

我使用以下代码行创建了一个名为sum.erl的文件:

-module(mysum).
-export([mysum/1]).

mysum(L) -> 
   mysum(L, 0).

mysum([H|T], acc) -> 
   mysum(T, H + acc); 

mysum([], acc) ->
   acc.
Run Code Online (Sandbox Code Playgroud)

然后我编译:

erl sum.erl
Run Code Online (Sandbox Code Playgroud)

这把我带到了一个壳.在那里,我键入:

1> L = [1, 3, 7].
[1, 3, 7]
2> mysum(L).
** exception error: undefined shell command mysum/1
3>sum:mysum(L).
** exception error: undefined function sum:mysum/1
Run Code Online (Sandbox Code Playgroud)

说什么 ?为什么我会收到这些错误,即使错误消息略有不同,我想也许他们的意思相差甚远?

更新:新代码

-module(sum).
-export([sum/1]).

sum(L) -> 
   sum(L, 0).

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

sum([], Acc) ->
   Acc.
Run Code Online (Sandbox Code Playgroud)

然后

1>L = [1,2,3].
[1,2,3]
2>sum:sum(L).
** exception error: no function clause matching sum:sum([1,2,3],0)
Run Code Online (Sandbox Code Playgroud)

Ada*_*erg 8

应该调用该文件mysum.erl,与-module指令中的名称相同.Erlang中的任何其他内容都是编译器错误.

确保您已c(mysum)在shell中使用它编译它(并且您位于其中的目录中mysum.erl).

由于您的模块已命名mysum并且导出的函数已命名mysum,因此您应该使用以下命令调用它:

3> mysum:mysum(L)
Run Code Online (Sandbox Code Playgroud)

此外,您acc应将结果存储的变量命名为Acc(大写a).否则,它是一个原子,function_clause一旦调用就会出现错误,mysum(L, 0)因为没有子句0作为第二个参数处理(0仅与原子相比acc).