无法将乐趣分配给 erlang 模块中的变量
Not able to assign fun to variable in a erlang module
我正在研究 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)).
我想要实现的是能够将变量(分配给它的乐趣)作为参数传递给地图。获取此模块的总成本
我不断收到语法错误/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)).
第二种方法:
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.
或
costeach({W, Q}) -> shop:cost(W)*Q.
我正在研究 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)).
我想要实现的是能够将变量(分配给它的乐趣)作为参数传递给地图。获取此模块的总成本
我不断收到语法错误/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)).
第二种方法:
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.
或
costeach({W, Q}) -> shop:cost(W)*Q.