函数列表及其执行Erlang

时间:2016-04-29 18:07:30

标签: functional-programming erlang

是否可以创建函数列表并将其作为参数发送给另一个函数,然后在此列表中有一些函数调用此列表中的其他函数?
例如,我想要一个在作为参数传递的列表上工作的函数,然后在这个数字列表的函数列表中执行第一个函数,如果该函数调用该列表中的其他函数,它们可以是检索和使用。

例如:偏差(数字,功能) - > %功能= [有趣的主人/ 1,有趣的平均/ 1,有趣的意味着/ 1]
Master调用avg,然后将结果传递给meanroots等,但在调用链的末尾,master将返回一个值。

我想知道这是否在功能上是可行的,无论是单独使用OTP还是使用NIF,以及是否有实施样本可供查看。

2 个答案:

答案 0 :(得分:2)

您的函数如何知道列表中的某个函数是否在列表中调用另一个函数?我认为你的问题令人困惑。

您可以创建一个函数,通过一系列函数来链接结果:

chain(Nums, []) -> Nums;
chain(Nums, [H | T]) -> chain(H(Nums), T).

可以使用标准函数完成:

lists:foldl(fun (F, V) -> F(V) end, Nums, Funcs)

答案 1 :(得分:2)

当然你可以:

1> F1 = fun(A) -> A*A end.
#Fun<erl_eval.6.50752066>
2> F2 = fun(A) -> A+A end.
#Fun<erl_eval.6.50752066>
3> F3 = fun(A) -> A*A+A end.
#Fun<erl_eval.6.50752066>
4> Funs = [F1, F2, F3].
[#Fun<erl_eval.6.50752066>,#Fun<erl_eval.6.50752066>,
 #Fun<erl_eval.6.50752066>]
5> [F(X) || X <- [1,2,3], F <- Funs].
[1,2,2,4,4,6,9,6,12]

您可以使用函数创建带标记的元组,例如{tag1, F1}(其中F1的定义如上所述),将它们传递给函数并使用它们处理通常与Erlang中任何其他变量一起使用的所有东西。