我正在使用来自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)).
我想要实现的是能够将Variable(带有乐趣分配给它)作为参数映射。从这个模块中获得总成本
我不断收到语法错误/ Costeach未初始化错误。
答案 0 :(得分:5)
您无法在顶层定义类似的功能。您有两种选择:使用您正在使用的语法,但在命名函数中声明它,或者将其声明为命名函数,并使用fun name/arity
语法将其转换为匿名函数以传递给{{1 }}
第一种方法:
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)).
提示:在两种情况下都可以在函数参数中进行destructure以保存一行代码:
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)).
或
Costeach = fun({W,Q}) -> shop:cost(W)*Q end.