2012-06-10 20 views
6

Jak zdefiniować funkcję wszechobecną w APL?Definiowanie funkcji wszechobecnej w APL

Co mogę zrobić, to

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

myślę, że nie powinno być lepszym sposobem na to, że nie widzę go zrobić.

Odpowiedz

3

Najbardziej prymitywne funkcje w APL są już wszechobecne. Tak więc, jeśli nie masz ochoty na takie rzeczy, twoje niestandardowe funkcje będą już wszechobecne. Na przykład:

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

będzie działać zarówno na tablicach, jak i skalarach.

Jeśli tak zrobić wymyślnych rzeczy i masz non-wszechobecną funkcję f można przekształcić go w wszechobecnej jeden przez

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

który można odczytać jako: jeśli argument jest skalarne, Zastosuj na nim f, w przeciwnym razie rekurencyjnie przejdź do każdej pozycji argumentu.

0

dfns workspace zawiera perv operator co powoduje jej argumentach operacji funkcję pervasively być stosowane z jednym lub dwoma argumentami:

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

Try it online!

Powiązane problemy