0

[(+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]

我很欣赏有关如何实现这一点以及通常如何访问使用匿名函数传入的列表元素的任何建议。

提前谢谢了!

4

2 回答 2

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).

这里列表中的每个元素都是一个匿名函数。

于 2013-04-21T17:34:04.247 回答
0

你可以使用列表理解来写一些东西。

-module(mylists).
-export([mapList/2]).

mapList(ListFuns, Val) ->
   [ Func(Val) || Func <- ListFuns].

是生成器,它Func <- ListFuns为列表推导创建函数列表。结果Func(Val)是,表示我们要将函数应用于传递给原始函数的值mapList

于 2013-04-21T17:26:03.137 回答