⍝ Vector of functions:

    1 2 3 4 {''} vof + vof ! vof ? vof | 5 6 7 8        ⍝ vector vector
┌─┬──┬─────┬─┐
│6│15│1 6 4│0│
└─┴──┴─────┴─┘
          4 {''} vof + vof ! vof ? vof | 5 6 7 8        ⍝ scalar vector
┌─┬──┬───────┬─┐
│9│15│4 2 1 5│0│
└─┴──┴───────┴─┘
    1 2 3 4 {''} vof + vof ! vof ? vof | 5              ⍝ vector scalar
┌─┬──┬─────┬─┐
│6│10│4 5 2│1│
└─┴──┴─────┴─┘
          4 {''} vof + vof ! vof ? vof | 5              ⍝ scalar scalar
┌─┬─┬───────┬─┐
│9│5│3 5 1 4│1│
└─┴─┴───────┴─┘

            {''} vof + vof ! vof ? vof | 5 6 7 8        ⍝ monadic vector
5 720 1 8

            {''} vof + vof ! vof ? vof | 5              ⍝ monadic scalar
5 120 2 5

    1 disp {2⍴⍵} vof {3⍴⍵} vof {4⍴⍵} 2 3 4              ⍝ without left closure
┌→┬─┬─────┬───────┐
│2│2│3 3 3│4 4 4 4│
└─┴─┴~───→┴~─────→┘

    1 disp {⍬} vof {2⍴⍵} vof {3⍴⍵} vof {4⍴⍵} 2 3 4      ⍝ explicit left closure
┌→──┬─────┬───────┐
│2 2│3 3 3│4 4 4 4│
└~─→┴~───→┴~─────→┘

    _vof←{                          ⍝ Close vector of functions.
        ⍺←⊂                         ⍝ ⍺ elided: ⊂⍵.
        (al ar)(wl wr)←⍺ ⍵          ⍝ distrubute arg(s).
        1≡⍺ 1:(⍺⍺ wl)(⍵⍵ wr)        ⍝ mondadic.
        (al ⍺⍺ wl)(ar ⍵⍵ wr)        ⍝ dyadic.
    }

    1 disp {2⍴⍵} _vof {3⍴⍵} vof {4⍴⍵} 2 3 4             ⍝ closure using <_vof>
┌→──┬─────┬───────┐
│2 2│3 3 3│4 4 4 4│
└~─→┴~───→┴~─────→┘

Back to: code

Back to: Workspaces