⍝ Array of functions:

    ⎕io←1

    flist ← + fnarray - fnarray × fnarray ''        ⍝ 3-vector of fns: + - ×.

    flist.f 1 2 3                                   ⍝ monadic application.
1 ¯2 1

   1 2 3 flist.f 4 5 6                              ⍝ dyadic application.
5 ¯3 18

    fns← ⌈fnarray  ⌊fnarray ⍬                       ⍝ 2-vector of fns ⌈ ⌊.

    fns.f 3.5                                       ⍝ scalar ceiling and floor.
4 3
    fns.f 2.3 4.5                                   ⍝ vector ceiling and floor.
3 4
    5 10 fns.f 8 12                                 ⍝ dyadic max and min.
8 10

    fmat←2 2⍴+fnarray -fnarray ×fnarray ÷fnarray⍬ ⍝ 2×2 matrix of + - × ÷

    fmat.⎕cr'f'                                     ⍝ show function matrix.
┌─┬─┐
│+│-│
├─┼─┤
│×│÷│
└─┴─┘

    10 fmat.f 2                                     ⍝ fn mat between scalars.
12 8
20 5

    fmat.f ⍳2 2                                     ⍝ apply fmat to matrix arg.
┌───┬───────┐
│1 1│¯1 ¯2  │
├───┼───────┤
│1 1│0.5 0.5│
└───┴───────┘

    fvex←↓fmat                                      ⍝ nested array of functions.
    fvex.⎕cr'f'                                     ⍝ display function array.
┌─────┬─────┐
│┌─┬─┐│┌─┬─┐│
││+│-│││×│÷││
│└─┴─┘│└─┴─┘│
└─────┴─────┘

    20 fvex.f ⊂⊂4 5 10                              ⍝ 3-way conformability.
┌───────────────────┬──────────────────┐
│┌────────┬────────┐│┌──────────┬─────┐│
││24 25 30│16 15 10│││80 100 200│5 4 2││
│└────────┴────────┘│└──────────┴─────┘│
└───────────────────┴──────────────────┘
    fnest←,∘⊂\,fmat                                 ⍝ nastily nested array.
    fnest.⎕cr'f'                                    ⍝   ..      ..   functions.
┌─┬─────┬─────────┬─────────────┐
│+│┌─┬─┐│┌─┬─────┐│┌─┬─────────┐│
│ ││+│-│││+│┌─┬─┐│││+│┌─┬─────┐││
│ │└─┴─┘││ ││-│×││││ ││-│┌─┬─┐│││
│ │     ││ │└─┴─┘│││ ││ ││×│÷││││
│ │     │└─┴─────┘││ ││ │└─┴─┘│││
│ │     │         ││ │└─┴─────┘││
│ │     │         │└─┴─────────┘│
└─┴─────┴─────────┴─────────────┘
    12 fnest.f 3                                    ⍝ deep function application.
┌──┬────┬─────────┬─────────────┐
│15│15 9│┌──┬────┐│┌──┬────────┐│
│  │    ││15│9 36│││15│┌─┬────┐││
│  │    │└──┴────┘││  ││9│36 4│││
│  │    │         ││  │└─┴────┘││
│  │    │         │└──┴────────┘│
└──┴────┴─────────┴─────────────┘

⍝ Function arrays need not be named:

    (+fnarray -fnarray ⍬).f 1 2                     ⍝ raw monadic application.
1 ¯2

    10 20(+fnarray -fnarray ⍬).f 1 2                ⍝ raw dyadic application.
11 18

Back to: code

Back to: Workspaces