在APL中定义普适函数

时间:2012-06-10 07:41:29

标签: apl

如何在APL中定义普适函数?

我的工作是

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

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

2 个答案:

答案 0 :(得分:3)

APL中的大多数原始函数已经普遍存在。所以,除非你做了花哨的东西,你的自定义功能已经很普遍了。例如

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

将适用于数组和标量。

如果你确实做过花哨的东西并且你有一个非普遍的功能f,你可以把它变成一个

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

可以读作:如果参数是标量,则对其应用f,否则递归进入参数的每个项目。

答案 1 :(得分:0)

dfns workspace包含perv operator,导致其操作数函数普遍应用,带有一个或两个参数:

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

Try it online!