我正在使用Programming with Erlang中的示例代码.我很震惊.帮我理解下面代码出了什么问题.
-export([totalcost/1]).
Costeach = fun(X) -> {W,Q} = X, shop:cost(W)*Q end.
sum(H|T) -> H + sum[T];
sum([]) -> 0.
totalcost(L) -> sum(lists:map(Costeach,L)).
Run Code Online (Sandbox Code Playgroud)
所有我想要实现的是能够传递变量(分配给它的乐趣)作为映射参数.从这个模块获得总成本
我不断收到语法错误/ Costeach没有初始化错误.
您无法在顶层定义类似的功能.您有两个选择:使用您正在使用的语法,但在命名函数中声明它,或者将其声明为命名函数,并使用fun name/arity语法将其转换为要传递的匿名函数lists:map.
第一种方法:
sum(H|T) -> H + sum[T];
sum([]) -> 0.
totalcost(L) ->
Costeach = fun(X) -> {W,Q} = X, shop:cost(W)*Q end.
sum(lists:map(Costeach,L)).
Run Code Online (Sandbox Code Playgroud)
第二种方法:
costeach(X) -> {W,Q} = X, shop:cost(W)*Q.
sum(H|T) -> H + sum[T];
sum([]) -> 0.
totalcost(L) -> sum(lists:map(fun costeach/1,L)).
Run Code Online (Sandbox Code Playgroud)
提示:在两种情况下都可以在函数参数中进行destructure以保存一行代码:
Costeach = fun({W,Q}) -> shop:cost(W)*Q end.
Run Code Online (Sandbox Code Playgroud)
要么
costeach({W, Q}) -> shop:cost(W)*Q.
Run Code Online (Sandbox Code Playgroud)