2016-04-29 34 views
1

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

例如:偏差(数字,功能) - >%功能= [乐趣主/ 1,平均的乐趣/ 1,有趣meanroots/1]
主站调用AVG,然后传递该结果到meanroots等,但在调用链的结束,主人将返回一个值。

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

回答

2

您的函数将如何知道列表中的某个函数是否在列表中调用另一个函数?我认为你的问题措辞混乱。

你可以通过一系列的函数创建一个函数来链的结果:

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

它是用标准的函数来完成:

lists:foldl(fun (F, V) -> F(V) end, Nums, Funcs) 
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中的任何其他变量一起做的事情。