所以,假设我有一个函数列表,如[(+3), (*10), (+50)]
和值1
我试图在Erlang中创建一个函数,它使用匿名函数访问并将每个函数应用于值由用户传递。
在Haskell中我会这样做:
mapFuncs funcs val = map(\x -> x val) funcs
但是在Erlang中,我不确定如何将函数列表的每个元素应用于用户传入的值:
mapFuncs(Funcs, Val) -> lists:map(fun(X)->X(Val)).
输入:[(+3), (*10), (+50)] , 1
期望的输出:
[4, 10, 51]
我很感激有关如何实现这一点的建议,以及如何访问使用匿名函数传递的列表元素。
非常感谢提前!
答案 0 :(得分:3)
您可以使用列表:地图或列表理解。每个匿名函数都从列表中取为变量,并调用它来传递值。
使用列表地图
mapFuncs(Funcs, Val) ->
lists:map(fun(Fun)->Fun(Val) end, Funcs).
使用更强大的列表理解
mapFuncs(Funcs, Val) ->
[Fun(Val) || Fun <- Funcs].
该函数调用如下
mapFuncs([fun(Val) -> Val + 3 end,
fun(Val) -> Val * 10 end,
fun(Val) -> Val + 50 end], 1).
此处列表中的每个元素都是匿名函数。
答案 1 :(得分:0)
你可以使用列表理解来写一些东西。
-module(mylists).
-export([mapList/2]).
mapList(ListFuns, Val) ->
[ Func(Val) || Func <- ListFuns].
Func <- ListFuns
是生成器,这将创建列表推导的函数列表。结果为Func(Val)
,表示我们要将函数应用于传递给mapList
原始函数的值。