我如何通过参数传递函数?

基本想法是这样的(不起作用):

∇R ← double a
R ← 2 × a
∇

∇R ← a applytwice f
R ← f f a
∇

5 applytwice double

有类似的东西吗 \fun 在c中的erlang或功能点数?

有帮助吗?

解决方案

在APL中,函数不得作为参数传递给函数。但是,APL的运算符是高阶功能,可以将函数作为参数。有类似的原始运算符,例如 /(还原)来总结向量 + / v。函数 +是左操作数,并传递到操作员 /。

在Dyalog APL中,有一个原始操作员使用(命名为“ power”)应用函数n次,以便我们写下:

      double←{2×⍵}
      (double ⍣ 2) 7
28
      (double ⍣ 10) 7
7168

您也可以编写自己的操作员(在大多数APL中)。在Dyalog APL中,我们可以将您的ApplyTwice运营商编写为:

     applytwice←{⍺⍺ ⍺⍺ ⍵}
     double applytwice 7
28

最后,您可以通过将功能放置在命名空间中并传递命名空间来传递功能。这就像一个使用方法的非常轻的实例。例如:

       s←⎕NS ''
       s.f←{2×⍵}
       ApplyFTwice←{⍺.f ⍺.f ⍵}
       s ApplyFTwice 7
28

在这种情况下,该函数必须命名为F,但是我们可以在其自己的名称空间中使用许多不同的函数。

其他提示

您的applytwice离正确不正确。在dyalog apl和其他可能性中,非DFN(旧功能定义)代码看起来像这样:

       ∇ R ← (f applytwice) a
  [1]   R ← f f a
       ∇

       - applytwice 42
  42

       {2×⍵} applytwice 42
  168

在APL中,任何接受零,一个或两个数据参数的“程序”都是“函数”。内置功能(例如 + - 等)可能称为“原始功能”。示例中的双重函数将是“定义的函数”。 “操作员”接受函数和数据作为参数。 + /和 +是还原和扫描运算符的示例, +是 /或 ocerator的函数参数。相比之下,压缩和扩展功能使用相同的符号(/和),但具有左数据参数。

这就是APL命名法。

您也可以通过 引用. 。您可以传递char数组,然后在功能中执行。该字符串可能包含定义函数或直接定义的名称。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top