¿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.
¿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.
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.
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.
}