refs ← (fn ##.fnarray) fns              ⍝ Array of functions.

Maria Wells suggests this operator to produce an array of functions. The operat-
or accumulates a vector of namespace refs, each containing a single function f.

The  functions  contained  in each space can be applied to or between scalars or
similarly shaped arrays by using the "reference array" syntax: refs.f.

Note that the resulting function vector may be reshaped to form a function array
of any rank and depth; see examples below.

Examples:

    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

See also: Function_arrays

Back to: contents

Back to: Workspaces