【问题标题】:Lists of Functions and their execution Erlang函数列表及其执行 Erlang
【发布时间】:2016-08-25 00:04:29
【问题描述】:

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

例如:偏差(数字,函数)-> %Functions = [fun master/1, fun avg/1, fun meanroots/1]
Master 调用 avg,然后将该结果传递给 meanroots 等,但在调用链的末尾,master 是返回值的那个。

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

【问题讨论】:

    标签: functional-programming erlang


    【解决方案1】:

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

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

    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 中对任何其他变量所做的所有事情。

      【讨论】:

        猜你喜欢
        • 2015-02-01
        • 2010-11-30
        • 1970-01-01
        • 1970-01-01
        • 2015-02-12
        • 2019-03-16
        • 2015-04-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多