6

如何在 APL 中定义一个普遍的功能?

我所做的是

function←{
    (⊃⍣(⍬≡⍴⍵)){the function that apply to scalar}¨⍵
}

我认为应该有更好的方法来做到这一点,我没有看到它。

4

2 回答 2

3

APL 中的大多数原始函数已经无处不在。所以,除非你做一些花哨的事情,否则你的自定义函数已经很普遍了。例如

f←{÷1+*-⍵}    ⍝ sigmoid, f(x)=1/(1+exp(-x))

将适用于数组和标量。

如果你确实做了一些花哨的事情并且你有一个非普及的功能f,你可以通过以下方式将它变成一个普及的功能

g←{0=⍴⍴⍵:f⍵ ⋄ ∇¨⍵}   ⍝ the pervasive version of f

可以理解为:如果参数是标量,则应用f它,否则递归地进入参数的每个项目。

于 2012-12-21T17:59:23.363 回答
1

dfns工作区包含一个运算符,该perv运算符导致其操作数函数被普遍应用,带有一个或两个参数:

perv←{⍺←⊢               ⍝ Scalar pervasion
    1=≡⍺ ⍵ ⍵:⍺ ⍺⍺ ⍵     ⍝ (⍺ and) ⍵ depth 0: operand fn application
             ⍺ ∇¨⍵      ⍝ (⍺ or) ⍵ deeper: recursive traversal.
}

在线尝试!

于 2017-07-12T19:21:18.550 回答