因为我只是通过阅读书籍和自己的练习(而不是做作业)来学习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)
应该调用该文件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
).