使用匿名函数访问列表中的元素

时间:2013-04-21 17:03:17

标签: list erlang anonymous-function

所以,假设我有一个函数列表,如[(+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]

我很感激有关如何实现这一点的建议,以及如何访问使用匿名函数传递的列表元素。

非常感谢提前!

2 个答案:

答案 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原始函数的值。