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

      disp 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.

      disp fvex.⎕cr'f'                              ⍝ display function array.
┌→────┬─────┐
│┌→┬─┐│┌→┬─┐│
││+│-│││×│÷││
│└→┴→┘│└→┴→┘│
└────→┴────→┘

      disp 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.

      disp fnest.⎕cr'f'                             ⍝   ..      ..   functions.
┌→┬─────┬─────────┬─────────────┐
│ │     │         │┌→┬─────────┐│
│ │     │┌→┬─────┐││ │┌→┬─────┐││
│ │┌→┬─┐││ │┌→┬─┐│││ ││ │┌→┬─┐│││
│+││+│-│││+││-│×││││+││-││×│÷││││
│ │└→┴→┘││ │└→┴→┘│││ ││ │└→┴→┘│││
│ │     │└→┴────→┘││ │└→┴────→┘││
│ │     │         │└→┴────────→┘│
└→┴────→┴────────→┴────────────→┘

      disp 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

Trouble seeing APL font?