new ← old ##.enss reps                  ⍝ Emulate (∊⍺)←⍵.

Result  [new]  has  the  same  nesting structure as left argument [old] but with
items replaced in enlist order from the (possibly reshaped) array [reps].

[enss]  emulates  enlisted selected specification in that (var←var enss reps) is
the same as (∊var)←reps, where ∊ is enlist (⎕ml>0).

This function was supplied by Veli-Matti Jantunen.

[enss]  is  permissive  about the shape of its right argment. A stricter version
might be:

    enss←{                              ⍝ Emulate (∊⍺)←⍵.
        ⎕ML←2                           ⍝ (∊ is enlist).
        ⍬≡⍴⍵:⍺ ∇(⍴∊⍺)⍴⍵                 ⍝ extend scalar.
        (⍴∊⍺)≢⍴⍵:⎕SIGNAL 5              ⍝ conformability check.
        ⍺{                              ⍝ inner dfn for speed.
            2>≡⍺:(⍴⍺)⍴⍵                 ⍝ simple: shaped values.
            q←∊{(⍴∊⍵)↑1}¨⍺              ⍝ nested: partition vector.
            ⍺ ∇¨(⍴⍺)⍴(~∊0∊¨⍴¨⍺)\q⊂⍵     ⍝ substitute partitioned values.
        }⍵
    }

Examples:

    var←1 2,2+⊂2 3⍴(⍳2),(⊂2+2 3⍴⍳6),9 10,10+,∘⊂/⍳5

    disp var                        ⍝ nastily nested variable.
┌→┬─┬────────────────────────────┐
│ │ │┌→─┬──┬────────────────────┐│
│ │ │↓3 │4 │       5 6  7       ││
│ │ ││  │  │       8 9 10       ↓│
│ │ │├~─┼~─┼~──────────────────→┤│
│ │ ││  │  │┌→─┬───────────────┐││
│1│2││  │  ││  │┌→─┬──────────┐│││
│ │ ││  │  ││  ││  │┌→─┬─────┐││││
│ │ ││11│12││13││14││15│16 17│││││
│ │ ││  │  ││  ││  │└~─┴~───→┘││││
│ │ ││  │  ││  │└~─┴─────────→┘│││
│ │ ││  │  │└~─┴──────────────→┘││
│ │ │└~─┴~─┴───────────────────→┘↓
└─┴─┴───────────────────────────→┘

    disp var enss 17↑⎕a             ⍝ emulate: (∊var)←17↑⎕a
┌→┬─┬────────────────────┐
│ │ │┌→┬─┬──────────────┐│
│ │ │↓C│D│     EFG      ││
│ │ ││ │ │     HIJ      ↓│
│ │ │├─┼─┼─────────────→┤│
│ │ ││ │ │┌→┬──────────┐││
│A│B││ │ ││ │┌→┬──────┐│││
│ │ ││ │ ││ ││ │┌→┬──┐││││
│ │ ││K│L││M││N││O│PQ│││││
│ │ ││ │ ││ ││ │└─┴─→┘││││
│ │ ││ │ ││ │└─┴─────→┘│││
│ │ ││ │ │└─┴─────────→┘││
│ │ │└─┴─┴─────────────→┘↓
└─┴─┴───────────────────→┘

    disp var enss 0                 ⍝ scalar 0 extends.
┌→┬─┬─────────────────────┐
│ │ │┌→┬─┬───────────────┐│
│ │ │↓0│0│     0 0 0     ││
│ │ ││ │ │     0 0 0     ↓│
│ │ │├─┼─┼~─────────────→┤│
│ │ ││ │ │┌→┬───────────┐││
│0│0││ │ ││ │┌→┬───────┐│││
│ │ ││ │ ││ ││ │┌→┬───┐││││
│ │ ││0│0││0││0││0│0 0│││││
│ │ ││ │ ││ ││ │└─┴~─→┘││││
│ │ ││ │ ││ │└─┴──────→┘│││
│ │ ││ │ │└─┴──────────→┘││
│ │ │└─┴─┴──────────────→┘↓
└─┴─┴────────────────────→┘

    disp var enss 2/¨17↑⎕a          ⍝ right arg nesting preserved.
┌→───┬────┬────────────────────────────────────────┐
│    │    │┌→───┬────┬────────────────────────────┐│
│    │    │↓    │    │         ┌→─┬──┬──┐         ││
│    │    ││┌──┐│┌──┐│         ↓EE│FF│GG│         ││
│    │    │││CC│││DD││         ├─→┼─→┼─→┤         ││
│    │    ││└─→┘│└─→┘│         │HH│II│JJ│         ││
│    │    ││    │    │         └─→┴─→┴─→┘         ↓│
│    │    │├────┼────┼───────────────────────────→┤│
│┌──┐│┌──┐││    │    │┌→───┬─────────────────────┐││
││AA│││BB│││    │    ││    │┌→───┬──────────────┐│││
│└─→┘│└─→┘││    │    ││    ││    │┌→───┬───────┐││││
│    │    ││┌──┐│┌──┐││┌──┐││┌──┐││┌──┐│┌→─┬──┐│││││
│    │    │││KK│││LL││││MM││││NN││││OO│││PP│QQ││││││
│    │    ││└─→┘│└─→┘││└─→┘││└─→┘││└─→┘│└─→┴─→┘│││││
│    │    ││    │    ││    ││    │└────┴──────→┘││││
│    │    ││    │    ││    │└────┴─────────────→┘│││
│    │    ││    │    │└────┴────────────────────→┘││
│    │    │└────┴────┴───────────────────────────→┘↓
└────┴────┴───────────────────────────────────────→┘

See also: select enlist sam each

Back to: contents

Back to: Workspaces

Trouble seeing APL font?