⍝ Scalar pervasion:

    1(2 3),perv(4 5)6
┌─────────┬─────────┐
│┌───┬───┐│┌───┬───┐│
││1 4│1 5│││2 6│3 6││
│└───┴───┘│└───┴───┘│
└─────────┴─────────┘

⍝ We could parameterize the maximum  depth at which the
⍝ function is applied by passing it as a right operand:

    wwaw←{                  ⍝ Function operand applied ⍵⍵-Array-Wise.
        ⍵⍵≥¯1+|≡⍺ ⍵:⍺ ⍺⍺ ⍵  ⍝ Both shallow enough: apply operand.
        ⍵⍵≥|≡⍵:∇∘⍵¨⍺        ⍝ ⍵ shallow: traverse ⍺.
        ⍵⍵≥|≡⍺:⍺∘∇¨⍵        ⍝ ⍺ shallow: traverse ⍵.
        ⍺ ∇¨⍵               ⍝ Both deep: traverse both.
    }

      p←(⊂1 2)(3 4)
      q←(5 6)(⊂7 8)

      ⍕disp¨p q
 ┌─────┬───┐  ┌───┬─────┐ 
 │┌───┐│3 4│  │5 6│┌───┐│ 
 ││1 2││   │  │   ││7 8││ 
 │└───┘│   │  │   │└───┘│ 
 └─────┴───┘  └───┴─────┘ 

      p,perv q
┌─────────────────────┬─────────────────────┐
│┌─────────┬─────────┐│┌─────────┬─────────┐│
││┌───┬───┐│┌───┬───┐│││┌───┬───┐│┌───┬───┐││
│││1 5│2 5│││1 6│2 6│││││3 7│3 8│││4 7│4 8│││
││└───┴───┘│└───┴───┘│││└───┴───┘│└───┴───┘││
│└─────────┴─────────┘│└─────────┴─────────┘│
└─────────────────────┴─────────────────────┘

      p(,wwaw 0)q
┌─────────────────────┬─────────────────────┐
│┌─────────┬─────────┐│┌─────────┬─────────┐│
││┌───┬───┐│┌───┬───┐│││┌───┬───┐│┌───┬───┐││
│││1 5│2 5│││1 6│2 6│││││3 7│3 8│││4 7│4 8│││
││└───┴───┘│└───┴───┘│││└───┴───┘│└───┴───┘││
│└─────────┴─────────┘│└─────────┴─────────┘│
└─────────────────────┴─────────────────────┘

      p(,wwaw 1)q
┌─────────┬─────────┐
│┌───────┐│┌───────┐│
││1 2 5 6│││3 4 7 8││
│└───────┘│└───────┘│
└─────────┴─────────┘

      p(,wwaw 2)q
┌─────────┬─────────┐
│┌───┬─┬─┐│┌─┬─┬───┐│
││1 2│5│6│││3│4│7 8││
│└───┴─┴─┘│└─┴─┴───┘│
└─────────┴─────────┘

      p(,wwaw 3)q
┌─────┬───┬───┬─────┐
│┌───┐│3 4│5 6│┌───┐│
││1 2││   │   ││7 8││
│└───┘│   │   │└───┘│
└─────┴───┴───┴─────┘

⍝∇ perv

Back to: code

Back to: Workspaces