我如何将函数作为参数传递?
基本思路如下(不起作用):
∇R ← double a
R ← 2 × a
∇
∇R ← a applytwice f
R ← f f a
∇
5 applytwice double
在Erlang中是否有类似于\fun
的东西或者在C语言中是否有函数指针?
我如何将函数作为参数传递?
基本思路如下(不起作用):
∇R ← double a
R ← 2 × a
∇
∇R ← a applytwice f
R ← f f a
∇
5 applytwice double
在Erlang中是否有类似于\fun
的东西或者在C语言中是否有函数指针?
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
你的 applytwice 并没有离正确答案太远。在 Dyalog APL 和其他一些语言中,非 dfn(传统函数定义)代码可能如下所示:
∇ R ← (f applytwice) a
[1] R ← f f a
∇
- applytwice 42
42
{2×⍵} applytwice 42
168
你也可以通过引用来避免这个问题。你可以传递一个字符数组,然后在函数内执行它。该字符串可能包含已定义函数的名称或直接定义。