2012-06-10 9 views
6

¿Cómo se puede definir una función general en APL?Defina una función generalizada en APL

Lo que hago es

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

Creo que debe haber una mejor manera de hacer esto que no estoy viendo.

Respuesta

3

La mayoría de las funciones primitivas en APL ya están generalizadas. Por lo tanto, a menos que haga cosas extravagantes, sus funciones personalizadas ya serán omnipresentes. Por ejemplo,

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

funcionará tanto en matrices como en escalares.

Si lo hace hacer cosas de lujo y tiene una función no penetrante f, puede convertirlo en una generalizada por

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

que puede ser leído como: si el argumento es un escalar, aplique f en él, de lo contrario recurrirá a cada elemento del argumento.

0

El dfns workspace contiene el perv operator que hace que su función de operando que deben aplicarse penetrante, con uno o dos argumentos:

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

Try it online!

Cuestiones relacionadas