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?