Functional programming 函数及其执行Erlang的列表

Functional programming 函数及其执行Erlang的列表,functional-programming,erlang,Functional Programming,Erlang,是否可以创建函数列表并将其作为参数发送给另一个函数,然后让此列表中的某些函数调用此列表中的其他函数? 例如,我想要一个函数,它在作为参数传递的列表上工作,然后执行此数字列表中函数列表中的第一个函数,如果该函数调用该列表中的其他函数,则可以检索和使用它们 e、 g.:偏差(数字、函数)->%函数=[fun master/1,fun avg/1,fun meanroots/1] Master调用avg,然后将结果传递到meanroots等。但是在调用链的末尾,Master将返回一个值 我想知道这在功

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

e、 g.:偏差(数字、函数)->%函数=[fun master/1,fun avg/1,fun meanroots/1]
Master调用avg,然后将结果传递到meanroots等。但是在调用链的末尾,Master将返回一个值


我想知道这在功能上是否可行,无论是在OTP内部还是使用NIF,以及是否有实现示例可供查看。

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

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

chain(Nums, []) -> Nums;
chain(Nums, [H | T]) -> chain(H(Nums), T).
这可以通过标准功能完成:

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

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

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

chain(Nums, []) -> Nums;
chain(Nums, [H | T]) -> chain(H(Nums), T).
这可以通过标准功能完成:

lists:foldl(fun (F, V) -> F(V) end, Nums, Funcs)
当然,你可以:

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]
1>F1=fun(A)->A*A结束。
#乐趣
2> F2=乐趣(A)->A+A结束。
#乐趣
3> F3=乐趣(A)->A*A+A结束。
#乐趣
4> Funs=[F1,F2,F3]。
有趣,有趣,
#乐趣]
5> [F(X)| | X当然你可以:

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]
1>F1=fun(A)->A*A结束。
#乐趣
2> F2=乐趣(A)->A+A结束。
#乐趣
3> F3=乐趣(A)->A*A+A结束。
#乐趣
4> Funs=[F1,F2,F3]。
有趣,有趣,
#乐趣]
5> [F(X)| | X